我不明白为什么如果我将Constructor call must be the first statement in a constructor
转移到构造函数的最后一行,下面的代码会显示错误this(1);
。
package learn.basic.corejava;
public class A {
int x,y;
A()
{
// this(1);// ->> works fine if written here
System.out.println("1");
this(1); //Error: Constructor call must be the first statement in a constructor
}
A(int a)
{
System.out.println("2");
}
public static void main(String[] args) {
A obj1=new A(2);
}
}
我在StackOverflow上检查了很多关于这个主题的答案,但我仍然无法理解这个问题的原因。请帮我用一些简单的例子和解释来说明这个错误。
答案 0 :(得分:9)
如您所知,这有效:
A() {
this(1);
System.out.println("1");
}
为什么呢?因为它是Java语言规范中出现的语言规则:对同一个类中的另一个构造函数(this(...)
部分)或超类中的构造函数(使用super(...)
)的调用必须走在第一行。这是一种确保在初始化当前对象之前初始化父级状态的方法。
有关详情,请查看此post,详细说明情况。
答案 1 :(得分:1)
错误告诉您问题
A()
{
System.out.println("1");
this(1); //Error: Constructor call must be the first statement in a constructor
}
即。你必须先调用构造函数
A()
{
this(1);
System.out.println("1");
}
这也适用于对超级
的调用class B extends A
{
B()
{
super();
System.out.println("1");
}
}
正在回答here
的原因