请问这个对象的创建流程是什么,只调用了f( )方法,为什么会打印Window1/2/3/House/33?
程序的详细执行过程是怎样的?
class Window {
Window(int m) {
System.out.println("window " + m);
}
}
class House {
Window w1 = new Window(1);
House() { //构造器
System.out.println("House");
w3 = new Window(33);
}
Window w2 = new Window(2);
void f() { //方法
System.out.println("f()");
}
Window w3 = new Window(3);
}
public class OrderOfInit {
public static void main(String[] args) {
House h = new House();
h.f();
}
}
(1)主函数 new 了一个 House类, House类中有三个Window成员变量,w1,w2,w3,分别初始化,输出
window 1
window 2
window 3
(2)然后执行House的构造方法,输出 House,重新赋值w3,new了Window类,输出 window 33
(3)最后执行 f 方法,输出 f()
就是创建对象的时候先去初始化了成员变量,然后执行了构造方法中的内容,最后才调用了f方法。
1、执行main方法时开始执行,创建House对象h
2、执行House对象的构造器,先执行w1,输出“window 1”
3、继续执行构造器,执行w2,输出“window 2”
4、继续执行构造器,执行w3,输出“window 3”
5、继续执行构造器,执行w3 = new Window(33),重新赋值,输出“window 33”
6、执行完构造器,输出“House”
7、执行h.f()方法,输出“f()”
可以看出,Java在创建对象时,按照如下顺序初始化对象:
1、静态变量和静态块(只执行一次)
2、实例变量和实例块(按照代码中出现的顺序执行,每次创建对象时均会执行)
3、构造函数