靜態代碼塊,在類加載時可以執行,但不一定會執行


靜態代碼塊,在類加載時可以執行,但不一定會執行

下面列舉不同的類的加載方式,靜態代碼塊的執行狀況:

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