我知道这this(...)用于从另一个构造函数调用一个类的构造函数.但我们可以使用new相同的吗?
为了更清楚这个问题,Line-2是否有效?如果是(因为编译器没有投诉),为什么输出null不是Hello?
class Test0 {
String name;
public Test0(String str) {
this.name= str;
}
public Test0() {
//this("Hello"); // Line-1
new Test0("Hello"){}; // Line-2
}
String getName(){
return name;
}
}
public class Test{
public static void main(String ags[]){
Test0 t = new Test0();
System.out.println(t.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
man*_*uti 25
它是有效的,但它在该构造函数中创建了一个完全独立的实例Test0(更具体地说是一个匿名子类的实例Test0),并且它没有在任何地方使用.当前实例仍将字段name设置为null.
public Test0() {
// this creates a different instance in addition to the current instance
new Test0("Hello"){};
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果new使用无参数构造函数调用运算符,则会得到一个StackOverflowError.
第2行是有效的声明.这就是编译器没有显示任何错误的原因.但是你在那里创建一个匿名对象.退出构造函数后,它很快就会消失.因此,该值仍然为null,因为没有分配给它.
new Test0("Hello"){};
Run Code Online (Sandbox Code Playgroud)
上面的行将创建一个Test0类的匿名实例,并将name值赋给name变量.但是,由于您没有引用创建的匿名实例,它将从后续行中消失.所以你还没有为调用特定代码段的实例的name变量赋值.因此名字是null
就像在记忆中一样
