直接在java中初始化对象

时间:2012-08-17 12:13:14

标签: java object initialization

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

如:

String str="something...";

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

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

可能就像

MyClass obj1={"name",24};

MyClass obj1="name",24;

初始化对象? 或者它是如何可能的!

8 个答案:

答案 0 :(得分:40)

通常情况下,你会使用构造函数,但你不必使用!

这是构造函数版本:

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);


但是,如果您的字段为protectedpublic,则在您的示例中,您可以执行此操作,而无需定义构造函数。这是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;
    }
};

瞧!

答案 1 :(得分:4)

如果你有一个人类:

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配置时,经常使用它。

答案 2 :(得分:3)

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

示例:

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

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

myClass class = new myClass(24, "name");

答案 3 :(得分:0)

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

答案 4 :(得分: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);
    }

}

//由construtor对象初始化

k = 45m = 65

通过方法初始化对象

k = 34m = 56

通过引用对象初始化

a = 12  b =24

答案 5 :(得分:0)

java中有两种构造函数。

  1. 默认构造函数
  2. 参数化构造函数

您应该创建一个parameterized constructor来创建您的对象。

答案 6 :(得分:0)

以下内容可以满足您的要求,但不能达到您的期望。

因此,在名为MyData的类中,您将使用

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

因此,一旦对象被信任,这些命令就会运行,这使您可以在其他任何对象运行之前先填充该对象。

因此,您不必使用匿名子类或创建新的构造函数,只需采取该类,然后使用其功能,即可进行其他操作。

答案 7 :(得分:-1)

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

  

String str =“something”

你可以用这种方式初始化字符串,因为String是java中的文字。只有文字才能以这种方式初始化。复合对象无法初始化,但只能使用带有构造函数的new运算符进行实例化。