1. 程式人生 > >static{}靜態程式碼塊與{}普通程式碼塊之間的區別

static{}靜態程式碼塊與{}普通程式碼塊之間的區別

轉載自:http://blog.csdn.net/aledavvv/article/details/16920743

相同點:都是在JVM載入類時且在構造方法執行之前執行,在類中都可以定義多個,

    一般在程式碼塊中對一些static變數進行賦值。

不同點:靜態程式碼塊在非靜態程式碼塊之前執行(靜態程式碼塊—>非靜態程式碼塊—>構造方法)

    靜態程式碼塊只在第一次new執行一次,之後不再執行,而非靜態程式碼塊在每new

    一次就執行一次。非靜態程式碼塊可在普通方法中定義(不過作用不大);而靜態程式碼塊不行。

例:

//普通類publicclass PuTong {
    
public PuTong(){
        
System.out.print("預設構造方法!-->");
    
}

//非靜態程式碼塊{
        System.out.print("非靜態程式碼塊!-->");
    
}

//靜態程式碼塊static{
        
System.out.print("靜態程式碼塊!-->");
    
}

publicstaticvoid test(){
        
{
            System.out.println("普通方法中的程式碼塊!");
        
}
    }
}

//測試類publicclass TestClass {
    

/**
     
區別兩次new靜態與非靜態程式碼塊執行情況
*/publicstaticvoid main(String[] args) {
        
PuTong c1 = new PuTong();
        
c1.test();

        PuTong c2 = new PuTong();
        
c2.test();
    }
}

/*
執行輸出結果是:靜態程式碼塊!-->非靜態程式碼塊!-->預設構造方法!-->普通方法中的程式碼塊!非靜態程式碼塊!-->預設構造方法!-->普通方法中的程式碼塊!

*/

一般情況下,如果有些程式碼必須在專案啟動的時候就執行的時候,需要使用靜態程式碼塊,這種程式碼是主動執行的;需要在專案啟動的時候就初始化,在不建立物件的情況下,其他程式來呼叫的時候,需要使用靜態方法,這種程式碼是被動執行的.


兩者的區別就是:靜態程式碼塊是自動執行的;

靜態方法是被呼叫的時候才執行的. 

作用:靜態程式碼塊可用來初始化一些專案最常用的變數或物件;靜態方法可用作不建立物件也可能需要執行的程式碼.