是否可以在类的构造函数中使用“new”来调用 Java 中的另一个构造函数?

2022-09-05 00:02:04

我知道它用于从另一个构造函数调用类的一个构造函数。但是我们能用同样的东西吗?this(...)new

为了更清楚地说明这个问题,2号线有效吗?如果是(因为编译器没有抱怨),为什么输出不是?nullHello

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

答案 1

它是有效的,但它在该构造函数内创建了一个完全独立的实例(更具体地说是 匿名子类的实例),并且它没有在任何地方使用。当前实例的字段仍设置为 。Test0Test0namenull

public Test0() {
    // this creates a different instance in addition to the current instance
    new Test0("Hello"){};
}

请注意,如果使用无参数构造函数调用运算符,则会得到 .newStackOverflowError


答案 2

您尝试执行的操作由您注释掉的代码完成:

public Test0()
{
    this("Hello");
}