当前位置: 技术问答>java相关
好奇怪的初始化问题。
来源: 互联网 发布时间:2015-04-26
本文导语: class Test { int i=6; Test() { this(i);//此处错误:cannot reference i before supertype constructor has been called } Test(int x) { System.out.println(i); x++; } public static void main(String [] args) { ...
class Test {
int i=6;
Test() {
this(i);//此处错误:cannot reference i before supertype constructor has been called
}
Test(int x) {
System.out.println(i);
x++;
}
public static void main(String [] args) {
Test t = new Test();
}
}
编译出错,错误为cannot reference i before supertype constructor has been called。
错误地点是this(i).
要是将this(i)替换为System.out.println(i)可以通过,可见并不是i未初始化的问题。
那么她告诉我的错误到底是什么意思呢?以前从来没碰到过,谁能给我讲一下出错的原理是什么?
int i=6;
Test() {
this(i);//此处错误:cannot reference i before supertype constructor has been called
}
Test(int x) {
System.out.println(i);
x++;
}
public static void main(String [] args) {
Test t = new Test();
}
}
编译出错,错误为cannot reference i before supertype constructor has been called。
错误地点是this(i).
要是将this(i)替换为System.out.println(i)可以通过,可见并不是i未初始化的问题。
那么她告诉我的错误到底是什么意思呢?以前从来没碰到过,谁能给我讲一下出错的原理是什么?
|
成员变量的值在构造函数开始运行时赋值既顺序是
执行Test()后:
int i;
i = 6;
this();
但是你写了this(i);这时的顺序是
int i;
this(i);
i = 6;
因为this(some arg)是在构造函数中第一个出现的东西;
不写this(i)时的执行顺序是:
int i;
i = 6;
this();
System.out.println(i);
当然不会报错
执行Test()后:
int i;
i = 6;
this();
但是你写了this(i);这时的顺序是
int i;
this(i);
i = 6;
因为this(some arg)是在构造函数中第一个出现的东西;
不写this(i)时的执行顺序是:
int i;
i = 6;
this();
System.out.println(i);
当然不会报错
|
错,i不是儿子,而是Test的身体的一部分,
class Father {
...
}
class Son : public Father {
...
}
这样才是父子关系。:)
人要形成胚胎后才有手,
这里应该是精子在受孕之后,还没有形成胚胎,
就想对他的手进行操作。
class Father {
...
}
class Son : public Father {
...
}
这样才是父子关系。:)
人要形成胚胎后才有手,
这里应该是精子在受孕之后,还没有形成胚胎,
就想对他的手进行操作。