本帖最后由 赵崇友 于 2013-4-29 10:21 编辑
你的程序执行的顺序是:在声明House h时,Java虚拟机会现将House字节码文件加载进内存,即使你没有创建实例对象也是如此的。然后就对House类中的成员进行默认初始化,Window w1,Window w2,Window w3,它们的默认值都是null,然后才是显示初始化,依次就是分别w1=new Window(1);w2=new Window(2);w3=new Window(3);因此在你创建House对象之前,就会输出Window(1) 、Window(2)、 Window(3)。然后就是实例化House对象了,后面的顺序自然而然就是Hosue(),Window(33),f()了。初始化的顺序我标出来了
不知道,我说的够清楚不!!- import static cn.nchu.out.Print.*;//引入的自定义jar包
- class Window {
- Window(int marker){
- print("Window("+ marker +")");
- }
- }
- class House {
- Window w1 = new Window(1);//创建Window第一个对象1111111
- House() {
- print("House()");4444444
- w3 = new Window(33);5555555555
- }
- Window w2 = new Window(2);//创建Window第二个对象2222222222
- void f() {
- print("f()");666666666666
- }
- Window w3 = new Window(3);//创建Window第三个对象333333333
- }
- public class OrderOfInitialization {
- public static void main(String[] args){
- House h = new House();
- h.f();
- }
- }
复制代码 |