1、类里面的静态代码区如下,TestStatic里面有一个静态代码块static
2、mian函数和静态代码块
3、静态代码块执行顺序
静态代码块在程序入口main方法之前就被执行
静态代码块在使用反射时执行Class.forName
实际上,static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化,静态块执行等工作
下面是执行static块的几种情况:
1、第一次new TestStatic对象,先执行static静态代码块,然后执行TestStatic构造函数
2、第一次调用Class.forName("com.test.TestStatic");
因为这个过程相当于Class.forName("TestStatic",true,this.getClass().getClassLoader());
如果Class.forName("TestStatic",false,this.getClass().getClassLoader()),false表明转载类的过程中不进行初始化,不初始化则不会执行static块。
3、loadClass
loadClass时并不会执行到静态代码区,因为loadClass内部调用到loadClass(name, false),没有进行初始化动作
public Class<?> loadClass(String name) throws ClassNotFoundException {
return loadClass(name, false);
}