这个逻辑是对的,但是凡是new出来的成员变量是先于构造器里的代码执行的.在单步调试测试后,结果就是:成员变量会在执行构造函数开始时就去声明出来,例如有如下几个属性
private String a;
private String b=new String();
在new该类的时候,进入构造函数的时候会调用系统默认的方法先检测该类的属性声明,如果属性中有new 出现,那么依次执行属性的构造方法,成员变量即属性声明完成后继续构造方法中,自定义的方法!
class X {
T t=new T();//@
Y b = new Y();
X() {
System.out.print("X");
}
}
class T {
T() {
System.out.print("T");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Z() {
System.out.print("Z");
}
Y y = new Y();
public static void main(String[] args) {
new Z();
}
}
这个程序的执行结果是:TYXYZ,@处换一下位置就会出现不同的结果
class X {
Y b = new Y();//@
T t=new T();
X() {
System.out.print("X");
}
}
class T {
T() {
System.out.print("T");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Z extends X {
Z() {
System.out.print("Z");
}
Y y = new Y();
public static void main(String[] args) {
new Z();
}
结果为:YTXYZ