我知道this(...)用于从另一个构造函数调用类的一个构造函数。但是我们可以使用new一样吗?

为了更清楚地说明问题,第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());
    }
}

最佳答案

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

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

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

关于java - 可以在类的构造函数内使用 "new"来调用Java中的另一个构造函数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30680411/

10-10 09:19