是否可以直接初始化对象,就像我们可以在 java 中使用 String 类一样:
如:
String str="something...";
我想为我的自定义类做同样的事情:
class MyData{
public String name;
public int age;
}
有可能吗
MyClass obj1={"name",24};
或者
MyClass obj1="name",24;
初始化对象?或者怎么可能!
是否可以直接初始化对象,就像我们可以在 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
or 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;
}
};
瞧!
如果你有一个类人:
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 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);
可以使用关键字 new 和使用构造函数,但不像 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);
以下是您想要的,但不是您期望的方式。
所以在一个调用 MyData 的类中,你会使用
Public MyData x = new MyData();
@PostConstruct public void init() {
x.setName("Fering");
x.setAge(18);
}
因此,一旦对象被信任,这些命令就会运行,这允许您在其他任何东西运行之前填充对象。
因此,您不必使用匿名子类或创建新的构造函数,您只需获取该类,然后使用它的函数,然后再进行其他任何操作。
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
There are two types of Constructors in java.
You should create a parameterized constructor to create your object.
在对象初始化期间,Java 中的构造函数(以及 new 运算符)没有替代品。你提到过
字符串 str = "某事"
您可以通过这种方式初始化字符串,因为 String 是 java 中的文字。只有文字可以这样初始化。一个复合对象不能被初始化,而只能用带有构造函数的new操作符来实例化。