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);
}

本文详细解析了Java中静态代码块的执行时机与顺序,包括在main方法前、使用Class.forName时以及对象创建时的执行情况。同时,阐述了loadClass方法与静态代码块执行的关系。

505

被折叠的 条评论
为什么被折叠?



