随着学习Java的深入,有时候难免遇到执行顺序的问题。
如果不能够理解JVM的类加载的顺序,会很难理解Java代码的执行过程。
public
class Test{
private static Test tester=new Test();//step 1
private static int count1;//step 2
private static int count2= 4;//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){
System.out.prinltn("count1 = "+count1);
System.out.println("count2 = "+count2);
}
}
问执行顺序是怎样的?
问执行结果是怎样的?
答案分别是:
14235
1 1
count1 = 1
count2 = 4
你打对了么?
如果答案不是你想的那样,你该了解一下Java类的加载过程了。
JVM在执行一个java类需要经过 3 步。
1、装载 2、连接 3、初始化
这里不做过多说明,请自行搜索“类加载过程”。
2阶段 连接 做的事情有必要说明一下,它会把装载到内存中的类成员赋予初始值,例如 int 初始值是 0 ,复杂类型 初始值 null等。
所以在执行java代码之前,各成员变量已经有初始值了。
之后进入到 步骤 3 初始化 阶段,这个过程就是顺序执行了。
step 1 调用了 step 4 ,所以 执行过程是 14235,
执行step 4 时 ,会将 count 1 ,2 都自加,然后输出,因为在连接阶段都是 设置成 0 ,所以肯定输出的是 1 1 。
执行过之后,count1 = 1,而 step 3 重新初始化了 count2 = 4;
故当执行main时,输出的是 1 ,4。
如果还有其他不足希望能够补充。