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

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

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

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");//不会执行静态代码块
    }

}

 

posted on 2019-12-30 17:17  下周去洗车  阅读(2051)  评论(0)    收藏  举报

导航