static{}靜態程式碼塊與{}普通程式碼塊之間的區別
阿新 • • 發佈:2019-02-01
轉載自:http://blog.csdn.net/aledavvv/article/details/16920743
相同點:都是在JVM載入類時且在構造方法執行之前執行,在類中都可以定義多個,
一般在程式碼塊中對一些static變數進行賦值。
不同點:靜態程式碼塊在非靜態程式碼塊之前執行(靜態程式碼塊—>非靜態程式碼塊—>構造方法)。
靜態程式碼塊只在第一次new執行一次,之後不再執行,而非靜態程式碼塊在每new
一次就執行一次。非靜態程式碼塊可在普通方法中定義(不過作用不大);而靜態程式碼塊不行。
例:
//普通類publicclass PuTong {public PuTong(){
}
//非靜態程式碼塊{
System.out.print("非靜態程式碼塊!-->");
}
//靜態程式碼塊static{
System.out.print("靜態程式碼塊!-->");
}
publicstaticvoid test(){
{
System.out.println("普通方法中的程式碼塊!");
}
}
}
//測試類publicclass TestClass {
/**
* 區別兩次new靜態與非靜態程式碼塊執行情況
PuTong c1 = new PuTong();
c1.test();
PuTong c2 = new PuTong();
c2.test();
}
}
/*
執行輸出結果是:靜態程式碼塊!-->非靜態程式碼塊!-->預設構造方法!-->普通方法中的程式碼塊!非靜態程式碼塊!-->預設構造方法!-->普通方法中的程式碼塊!
*/
一般情況下,如果有些程式碼必須在專案啟動的時候就執行的時候,需要使用靜態程式碼塊,這種程式碼是主動執行的;需要在專案啟動的時候就初始化,在不建立物件的情況下,其他程式來呼叫的時候,需要使用靜態方法,這種程式碼是被動執行的.
兩者的區別就是:靜態程式碼塊是自動執行的;
靜態方法是被呼叫的時候才執行的.
作用:靜態程式碼塊可用來初始化一些專案最常用的變數或物件;靜態方法可用作不建立物件也可能需要執行的程式碼.