Constructor call must be the first statement in a constructor
本问题已经有最佳答案,请猛点这里访问。
如果我将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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上查阅了很多关于这个主题的答案,但是我仍然不明白为什么会这样。请帮助我用一些简单的例子和解释来澄清这个错误。
如你所知,这是可行的:
1 2 3 4 |
为什么?因为它是Java语言规范中的语言规则:对同一个类中的另一个构造函数(EDCOX1,0个部分)或超类中的构造函数(使用EDCOX1(1))必须调用第一行。这是一种确保在初始化当前对象之前初始化父对象状态的方法。
有关更多信息,请看这篇文章,它详细解释了这种情况。
这个错误告诉你问题所在
1 2 3 4 5 | A() { System.out.println("1"); this(1); //Error: Constructor call must be the first statement in a constructor } |
即必须先调用构造函数
1 2 3 4 5 |
这也适用于对super的调用
1 2 3 4 5 6 7 8 |
原因在这里回答