3、java虚拟机-类的生命周期-初始化阶段(与程序员有关)
一 、静态代码块执行顺序和字节码文件中的执行顺序以及什么赋值。
类的生命周期-初始化阶段-被static所修饰的常量才会被赋予值
初始化阶段-代码中静态代码块和静态变量的顺序和字节码中的执行顺序是一致的。
二、4种情况下,类会被初始化。
1、怎样查看类是否被初始化了?
1.1 通过在代码中进行打印输出
-在代码里面进行输出,查看类会不会初始化
1.2 通过虚拟机参数-查看类会不会初始化
如果当前的类,中的静态变量被final所修饰,那么这个类是不会被初始化的。
2、ClassforName所调用的类会被初始化,不过ClassforName方法的重载方法中可以设置是否可以进行初始化。
3、通过new创建一个该对象时候,会被初始化。
4、执行Main方法的当前类会被初始化。
三、举例:执行顺序笔试题
构造方法字节码指令
一个类被初始化和加载,其中的静态代码块只会执行一次,而对象可以创建多次所以构造方法也可以执行多次,而代码块,通过字节码文件完们可以看到,是放到构造方法的字节码指令中执行的,且先执行,所以有了上述的输出结果。
四、什么情况下不会执行clinit(类初始化)字节码指令
前三个阶段总结:
其中除非要执行方法,表示右边需要一个方法进行计算例如Integer.valueof(1);