衆所周知在JAVA編程語言中有兩種初始化塊:編程
他們到底有什麼區別呢?今天就淺談一下JAVA中靜態初始化塊和非靜態初始化塊的區別編程語言
定義:函數
static{}測試
執行優先級高於非靜態的初始化塊,它會在對象裝載到系統的時候執行一次,執行完成便銷燬,它僅能初始化類變量,即static修飾的數據成員。this
執行優先級:1spa
定義:code
{}對象
執行的時候若是有靜態初始化塊,先執行靜態初始化塊再執行非靜態初始化塊,在每一個對象生成時都會被執行一次,它能夠初始化類的實例變量。非靜態初始化塊會在構造函數執行時,在構造函數主體代碼執行以前被運行。class
執行優先級:2變量
package temp; public class TempStatic { //自定義變量 public int num=0; //建立的一個對象可是並無實例化,咱們把實例化交給非靜態初始化塊 public TempStaticOne temp; //非靜態初始化塊 { System.out.println("我是非靜態初始化塊.."); this.num=1; this.temp = new TempStaticOne(); } //靜態初始化塊 static{ System.out.println("我是靜態初始化塊..."); } //構造函數 public TempStatic(){ System.out.println("我是構造方法.."); } //自定義方法 public void Show(){ System.out.println("變量最終結果爲:"+num); } }
執行結果:
我是靜態初始化塊... 我是非靜態初始化塊.. 我是非靜態方法初始化對象的測試.. 我是構造方法.. 變量最終結果爲:1