Java程序初始化的順序

Java程序的初始化一般遵循三個原則(優先級依次遞減):
(1)靜態對象(變量)優先於非靜態對象(變量)初始化,其中,靜態對象(變量)只執行一次,而非靜態對象(變量)可能會初始化多次。
(2)父類優先於子類進行初始化。
(3)按照成員變量的定義順序進行初始化。即使變量定義散佈於方法定義之中,它們依然在任何方法(包括構造函數)被調用之前先初始化。

Java程序初始化工作可以在許多不同的代碼塊中來完成(例如靜態代碼塊、構造函數等),它們執行的順序如下:父類靜態變量、父類靜態代碼塊、子類靜態變量、子類靜態代碼塊、父類非靜態變量、父類非靜態代碼塊、父類構造函數、子類非靜態變量、子類非靜態代碼塊、子類構造函數。

下面Gd和大家一起看一個簡單的程序:

class Fu{
	static{
		System.out.println("Fu static block");
	}
	{
		System.out.println("Fu block");
	}
	public Fu(){
		System.out.println("Fu constructor");
	}
}

public class Zi extends Fu{
	static{
		System.out.println("Zi static block");
	}
	{
		System.out.println("Zi block");
	}
	public Zi(){
		System.out.println("Zi constructor");
	}
	public static void main(String[] args){
		new Zi();
	}
}

看了這個程序的輸出結果,就會一目瞭然了:

Fu static block
Zi static block
Fu block
Fu constructor
Zi block

Zi constructor

對比上面的規則,就會很容易記住這些規律了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章