如果所讨论的类没有扩展任何其他类,但是首先调用构造函数,并且如果所讨论的类正在扩展其他类,那么为什么要在调用构造函数之前初始化类变量!
例如,假设我有一堂课
public class Windows {
public Windows() {
System.out.println("in window");
}
}
我有一个基类。
public class BaseClass {
public BaseClass() {
System.out.println("in base");
}
}
最后我还有一堂课。
public class ChildClass extends BaseClass {
Windows w = new Windows();
public ChildClass() {
System.out.println("in subclass");
}
public static void main(String[] args) {
System.out.println(new ChildClass());
}
}
将导致
在子类的窗口中的基础中
这表明调用了基类构造函数,这意味着调用了子类构造函数,但是在基类构造函数完成后,为什么要初始化字段?即不应该是这样的
在窗口子类的基础中
这将解释一些事情!
如果我再次这样做
public class ChildClass {
Windows w = new Windows();
public ChildClass() {
System.out.println("in subclass");
}
public static void main(String[] args) {
System.out.println(new ChildClass());
}
}
我去拿
在子类的窗口中
这表明在构造函数窗口字段被初始化之前。使困惑!?!?!?如果我也添加一些静态字段,图片会变得更加混乱!
一些解释是JVM首先初始化基类的东西,然后是当前类的字段,最后是构造函数。这是真的吗?
一些解释会很棒!