说说执行顺序: java classpath . Test10执行时 首先加载 Test10 类 那么 第一个: static aa a = new aa(1); 会开始执行 new aa(1) 执行时, 首先执行 : static Test10 k = new Test10(); 但是 , 因为 Test10 的静态加载方法已经在执行,(或者说,已经标记了 Test10 的一个静态加载标记标志!)同时,根据 java 规范, 静态初始话变量(段) 只执行一次,所以,此时,不再执行 Test10 的 静态初始化动作!那么此时,只能执行
aa b = new aa(2); aa b = new aa(4); 非静态初始化操作!也就是你所见到的头两个 aa2,aa4 语句了! 接着的就很好理解了! Test10 的静态加载方法继续执行, System.out.println ("Test1Static"); new aa(3); // static Test10 k = new Test10(); 此时不再执行,因为已经执行过 然后到 main 方法: System.out.println ("MainBegin"); new Test10(); // 此时会重新调用 aa b = new aa(2); aa b = new aa(4); 就是这样啊!仔细看看我上面的说明,对照代码,应该会明白的!
System.out.println ("XXX");
来检测。
java classpath . Test10执行时
首先加载 Test10 类
那么 第一个: static aa a = new aa(1); 会开始执行
new aa(1) 执行时, 首先执行 : static Test10 k = new Test10();
但是 , 因为 Test10 的静态加载方法已经在执行,(或者说,已经标记了 Test10 的一个静态加载标记标志!)同时,根据 java 规范, 静态初始话变量(段) 只执行一次,所以,此时,不再执行
Test10 的 静态初始化动作!那么此时,只能执行
aa b = new aa(2);
aa b = new aa(4); 非静态初始化操作!也就是你所见到的头两个 aa2,aa4 语句了!
接着的就很好理解了!
Test10 的静态加载方法继续执行,
System.out.println ("Test1Static");
new aa(3); // static Test10 k = new Test10(); 此时不再执行,因为已经执行过
然后到 main 方法:
System.out.println ("MainBegin");
new Test10(); //
此时会重新调用
aa b = new aa(2);
aa b = new aa(4);
就是这样啊!仔细看看我上面的说明,对照代码,应该会明白的!