java 中靜態代碼和非靜態代碼塊的區別!

相同點:都是在JVM加載類時且在構造方法執行以前執行,在類中均可以定義多個,
    通常在代碼塊中對一些static變量進行賦值。
不一樣點:靜態代碼塊在非靜態代碼塊以前執行(靜態代碼塊—>非靜態代碼塊—>構造方法)。
    靜態代碼塊只在第一次new執行一次,以後再也不執行,而非靜態代碼塊在每new
    一次就執行一次。非靜態代碼塊可在普通方法中定義(不過做用不大);而靜態代碼塊不行。
例:
//普通類
public class PuTong {
    public PuTong(){
        System.out.print("默認構造方法!-->");
    }
    
    //非靜態代碼塊
    {
        System.out.print("非靜態代碼塊!-->");
    }
    
    //靜態代碼塊
    static{
        System.out.print("靜態代碼塊!-->");
    }
    
    public static void test(){
        {
            System.out.println("普通方法中的代碼塊!");
        }
    }
}

//測試類
public class TestClass {
    
    /**
     * 區別兩次new靜態與非靜態代碼塊執行狀況
     */
    public static void main(String[] args) {
        PuTong c1 = new PuTong();
        c1.test();
        
        PuTong c2 = new PuTong();
        c2.test();
    }
}

/*
運行輸出結果是:
靜態代碼塊!-->非靜態代碼塊!-->默認構造方法!-->普通方法中的代碼塊!
非靜態代碼塊!-->默認構造方法!-->普通方法中的代碼塊!
*/測試

相關文章
相關標籤/搜索