一小段测试代码如下:
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);
。错误消失了。因此,我认为name
和age
已初始化并获得值A
,20
。也就是说,this(name,age,title)
实际上是this("a",20,"John")
我不知道原则。需要你的帮助。
答案 0 :(得分:1)
Java文档说
如果存在,则另一个构造函数的调用必须是构造函数中的第一行。
答案 1 :(得分:1)
这个/ super构造函数调用必须是链接构造函数调用时的第一个语句。有关详细信息,请参阅this。
答案 2 :(得分:1)
答案 3 :(得分:0)
调用name
时,您无法访问字段age
和this()
。这些字段尚未初始化。如果您希望默认名称为“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");
}
}