可以直接初始化对象,就像我们在java中使用String类一样:
如:
String str="something...";
我想为我的自定义类做同样的事情:
class MyData{
public String name;
public int age;
}
可能就像
MyClass obj1={"name",24};
或
MyClass obj1="name",24;
初始化对象? 或者它是如何可能的!
答案 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);
但是,如果您的字段为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;
}
};
瞧!
答案 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)
答案 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运算符进行实例化。