JAVA靜態初始化塊和非靜態初始化塊

衆所周知在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

相關文章
相關標籤/搜索