使用构造函数的this()在Java中调用同一个类中的另一个构造函数

时间:2014-12-13 15:49:53

标签: java constructor

一小段测试代码如下:

class Teacher {
    private String title;
    String name = "A";
    int age = 20;

    Teacher (String title) {
        //System.out.println(name);
        this(name,age,title);
    }

    Teacher (String name, int age, String title) {
        System.out.println("OK");
    }
}

public class Test {
    public static void main (String[] args) {
        Teacher teacher1 = new Teacher("John");
        Teacher teacher2 = new Teacher("Mike",25,"TA");
    }
}

如上所述,我注释了System.out.println(name);编译后,出现了错误:Can't reference name(age) before the superclass constructor has been called.但是,我注释了this(name,age,title);,这意味着我只使用了System.out.println(name);。错误消失了。因此,我认为nameage已初始化并获得值A20。也就是说,this(name,age,title)实际上是this("a",20,"John")我不知道原则。需要你的帮助。

4 个答案:

答案 0 :(得分:1)

Java文档说

  

如果存在,则另一个构造函数的调用必须是构造函数中的第一行。

答案 1 :(得分:1)

这个/ super构造函数调用必须是链接构造函数调用时的第一个语句。有关详细信息,请参阅this

答案 2 :(得分:1)

原则是,

  

如果存在,则必须首先调用另一个构造函数   构造函数中的行。

参考:JavaDoc

使用this关键字调用其他构造函数。 当您注释掉第一个语句时,构造函数调用将成为合法的第一行。

答案 3 :(得分:0)

调用name时,您无法访问字段agethis()。这些字段尚未初始化。如果您希望默认名称为“A”且年龄为20,请直接将值作为参数输入this()

以下类将编译:

class Teacher {
    private String title;
    String name;
    int age;

    Teacher (String title) {
        this("A",20,title);
    }

    Teacher (String name, int age, String title) {
        this.name = name;
        this.age = age;
        System.out.println("OK");
    }
}
相关问题