直接在java中初始化对象

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

如:

String str="something..."; 

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

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

是可能的

 MyClass obj1={"name",24}; 

要么

 MyClass obj1="name",24; 

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

通常,您将使用构造函数,但您不必!

这是构造函数版本:

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

瞧!

我知道有构造函数,但是否存在任何替代方式?

不,没有建筑师的替代品。

这基本上是该语言的基本保证之一。 除了通过构造函数之外,不能通过任何其他方式构造对象,并且除了通常的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); 

如果你有一个人类:

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

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

例:

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

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

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

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

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

java中有两种类型的构造函数。

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

您应该创建一个参数化构造函数来创建您的对象。

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

String str =“something”

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