这个逻辑是对的,但是凡是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
博客主要探讨Java继承相关知识,指出new出来的成员变量先于构造器里的代码执行。通过具体代码示例,展示了在创建对象时,成员变量声明及构造方法的执行顺序,且成员变量声明顺序不同会导致程序执行结果不同。
1047

被折叠的 条评论
为什么被折叠?



