直接在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);
但是,如果您的字段受到protected
或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; } };
瞧!
我知道有构造函数,但是否存在任何替代方式?
不,没有建筑师的替代品。
这基本上是该语言的基本保证之一。 除了通过构造函数之外,不能通过任何其他方式构造对象,并且除了通常的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中有两种类型的构造函数。
- 默认构造函数
- 参数化构造函数
您应该创建一个参数化构造函数来创建您的对象。
在对象初始化期间,java中没有构造函数(以及new运算符)的替代方法。 你提到过
String str =“something”
你可以用这种方式初始化字符串,因为String是java中的文字。 只有文字才能以这种方式初始化。 复合对象无法初始化,但只能使用带有构造函数的new运算符进行实例化。