35

是否可以直接初始化对象,就像我们可以在 java 中使用 String 类一样:

如:

String str="something...";

我想为我的自定义类做同样的事情:

class MyData{
public String name;
public int age;
}

有可能吗

MyClass obj1={"name",24};

或者

MyClass obj1="name",24;

初始化对象?或者怎么可能!

4

10 回答 10

50

通常,您会使用构造函数,但您不必这样做!

这是构造函数版本:

public class MyData {
    private String name;
    private int age;

    public MyData(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter/setter methods for your fields
}

像这样使用:

MyData myData = new MyData("foo", 10);


但是,如果您的字段是protectedor public,如您的示例中所示,您可以在定义构造函数的情况下执行此操作。这是java中最接近您想要的方式:

// Adding special code for pedants showing the class without a constuctor
public class MyData {
    public String name;
    public int age;
}

// this is an "anonymous class"
MyData myData = new MyData() {
    {
        // this is an "initializer block", which executes on construction
        name = "foo";
        age = 10;
    }
};

瞧!

于 2012-08-17T12:15:26.670 回答
8

如果你有一个类人:

public class Person {

    private String lastName;
    private String firstName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

}

您实际上可以创建一个新的 Person 对象并使用以下内容初始化其 firstName 和 lastName:

 Person person = new Person(){{
     setFirstName("My FirstName");
     setLastName("MyLastName");
 }}

这在使用 Java 代码而不是 XML 配置定义 Spring 配置时经常使用。

于 2014-04-28T06:50:59.143 回答
4

您必须为对象创建一个构造函数方法,该方法接受您想要值的字段的参数。

例子:

public myClass( int age, String name)
{
   this.age = age;
   this.name = name;
}

然后在课堂上你想要这个:

myClass class = new myClass(24, "name");
于 2012-08-17T12:16:18.343 回答
3

我知道使用构造函数,但是是否存在任何替代方法?

不,没有构造函数的替代品。

这基本上是该语言的基本保证之一。除了通过其构造函数之外,无法通过任何其他方式构造对象,并且除了通常的new ConstructorName(...).

我能想出的最接近的想法是有一个名为say的静态工厂方法mc

class MyClass {
    ...
    public static mc(String name, int age) {
        return new MyClass(name, age);
    }
}

然后做

import static some.pkg.MyClass.mc;

...

MyClass obj1 = mc("name",24);
于 2012-08-17T12:21:42.873 回答
0

可以使用关键字 new 和使用构造函数,但不像 String 那样,这是一种非常特殊的对象。

于 2012-08-17T12:15:14.437 回答
0
class MyData{

    public MyData(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String name;
    public int age;
    }

然后你可以用这种方式实例化你的类:

MyData myData = new MyData("name", 24);
于 2012-08-17T12:16:33.210 回答
0

以下是您想要的,但不是您期望的方式。

所以在一个调用 MyData 的类中,你会使用

Public MyData x = new MyData();
@PostConstruct public void init() {
     x.setName("Fering");
     x.setAge(18);
}

因此,一旦对象被信任,这些命令就会运行,这允许您在其他任何东西运行之前填充对象。

因此,您不必使用匿名子类或创建新的构造函数,您只需获取该类,然后使用它的函数,然后再进行其他任何操作。

于 2020-11-09T20:51:52.177 回答
0
    package com.company;

public class InitializationOfObject {
    int a ;
    int b ;

    InitializationOfObject(){
    }

    InitializationOfObject( int r , int n){
        this.a = r;
        this.b = n;
        System.out.println("Object initialization by constructor  ");
    }

    void methodInitialization(int k, int m){
        System.out.println("object initialization via method");
        this.a = k;
        this.b = m;
    }

    void display(){
        System.out.println("k = " +a+ "m = "+b);
    }

    public static void main(String... arg){
        InitializationOfObject io = new InitializationOfObject();
        InitializationOfObject io2 = new InitializationOfObject(45,65);
        io.a = io2.a;
        io.b = io2.b;
        io.display();

        io.methodInitialization(34,56);
        io.display();

        io.a = 12;
        io.b = 24;
        System.out.println("object initialization via refrence");
        System.out.println("a = "+io.a+" "+ " b ="+io.b);
    }

}

//由构造函数初始化对象

k = 45m = 65

通过方法初始化对象

k = 34m = 56

通过引用初始化对象

a = 12  b =24
于 2017-08-16T07:38:50.527 回答
0

There are two types of Constructors in java.

  1. Default constructor
  2. Parameterized constructor

You should create a parameterized constructor to create your object.

于 2018-06-19T13:12:57.530 回答
-1

在对象初始化期间,Java 中的构造函数(以及 new 运算符)没有替代品。你提到过

字符串 str = "某事"

您可以通过这种方式初始化字符串,因为 String 是 java 中的文字。只有文字可以这样初始化。一个复合对象不能被初始化,而只能用带有构造函数的new操作符来实例化。

于 2012-08-17T12:43:45.607 回答