静态代码块,在类加载时可以执行,但不一定会执行


静态代码块,在类加载时可以执行,但不一定会执行

下面列举不同的类的加载方式,静态代码块的执行状况:

class ClassA{
    //静态代码块,在类加载时可以执行,但不一定会执行
    static {
        System.out.println("static{}");
    }
    }
//-XX:+TraceClassLoading
public class TestClassObject02 {
    
    public static void main(String[] args) throws Exception {
        //定义变量时不会触发类加载
        //Class<?> c0;
        //类的加载方式1
        //Class<?> c1 = ClassA.class;//不会执行静态代码块
        
        //类的加载方式2
        //Class.forName("com.java.oop.ClassA");//会执行静态代码块
        
        //类的加载方式3
        /*ClassLoader loader = ClassLoader.getSystemClassLoader();
        Class.forName("com.java.oop.ClassA",
                false,//不指定static{},true,指定
                loader);*/
        
        //类的加载方式4
        /*Class.forName("com.java.oop.ClassA",
                false,//不指定static{},true,指定
                ClassLoader.getSystemClassLoader());*/
        //不指定static{}  loader
        
        //类的加载方式5
        ClassLoader loader = ClassLoader.getSystemClassLoader();
        loader.loadClass("com.java.oop.ClassA");//不会执行静态代码块
    }

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM