日期:2014-05-20 浏览次数:20916 次
public class Test{ private static Test tester = new Test(); //step 1 private static int count1; //step 2 private static int count2 = 0; //step 3 public Test(){ //step 4 count1++; count2++; System.out.println("" + count1 + count2); } public static Test getTester(){ //step 5 return tester; } public static void main(String[] args){ Test.getTester(); } }
private static Test tester = new Test(); //step 1
------解决方案--------------------
6L 10L正解
的确是14235
只要注意在4的时候
private static int count1; //step 2 private static int count2 = 0; //step 3
------解决方案--------------------
Test.getTester();
JVM规定当4中情况下会出事类,其中一种酒是调用类的静态方法的时候。所以很明显这里调用Test的静态方法getTester所以Test会进行初始化。那么static的部分会被触发。根据初始化的顺序,那么很明显应该执行:
private static Test tester = new Test();
然后
private static int count1
private static int count2
也会被初始化,但是由于他们是int型的,所以初始化为0
这里就是创建Test对象咯,接下来就是进入Test的构造方法,
count1++;
count2++;
System.out.println("" + count1 + count2);
由于count2还没有进行赋值,所以它目前为0;所以 ++后count1和count2都是1
然后接下来就不用再说了吧。