static静态代码块的执行时机

static代码块内容执行的时机为 jvm执行类加载 的初始化阶段
如果不进行初始化,则static代码块中的内容不执行
Demo:

class A{
    static {
        System.out.println("A的静态代码块被调用...");
    }
    A(){
        System.out.println("A被创建...");
    }
}

class Demo {
    public static void main(String[] args) throws ClassNotFoundException {

        // 创建类加载器
        final ClassLoader classLoader = ClassLoader.getSystemClassLoader();

        // 类加载方式1
        classLoader.loadClass("Item.A");

        // 类加载方式2
        Class<A> aClass = A.class;

        // 类加载方式3 - 不指定是否初始化默认为true
        Class.forName("Item.A");

        // 类加载方式4
        Class.forName("Item.A", true, classLoader);

        // 类加载方式5
        Class.forName("Item.A", false, classLoader);
    }
}

上面的5种类加载过程中,只有第3、4种才会执行static静态代码块中的内容,因为这两种指定了需要进行初始化。
其中第三种虽然没有显式指定,源码中也已经指定需要初始化:
在这里插入图片描述
参考:
https://www.cnblogs.com/yuebuxichen/p/12120782.html
https://www.cnblogs.com/winterfells/p/7908189.html

原创文章 187 获赞 29 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43826242/article/details/105407513