静态代码块static执行时机

1、类里面的静态代码区如下,TestStatic里面有一个静态代码块static

静态代码块static执行时机_第1张图片

2、mian函数和静态代码块

静态代码块static执行时机_第2张图片

3、静态代码块执行顺序

静态代码块在程序入口main方法之前就被执行 

静态代码块在使用反射时执行Class.forName

实际上,static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化,静态块执行等工作

下面是执行static块的几种情况:

1、第一次new TestStatic对象,先执行static静态代码块,然后执行TestStatic构造函数

静态代码块static执行时机_第3张图片

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

静态代码块static执行时机_第4张图片

 

 

 

你可能感兴趣的:(java)