屬性、方法、構造方法和自由塊都是類中的成員,在建立類的物件時,類中各成員的執行順序:
1.父類靜態成員和靜態初始化快,按在**中出現的順序依次執行。
2.子類靜態成員和靜態初始化塊,按在**中出現的順序依次執行。
3. 父類的例項成員和例項初始化塊,按在**中出現的順序依次執行。
4.執行父類的構造方法。
5.子類例項成員和例項初始化塊,按在**中出現的順序依次執行。
6.執行子類的構造方法。
public class test
}class parent
static
public parent()
}class son extends parent
static
public son()
}
執行結果:
parent中static初始化塊
son中的static初始化塊
parent中的初始化塊
parent構造方法
son中的初始化塊
son構造方法
初始化塊主要用於物件的初始化操作,在建立物件時呼叫,可以用於完成初始化屬性值、載入其他的類的功能。
初始化塊和構造方法功能類似,可以再建立物件的時候完成一些初始化的操作,一般的情況下,構造方法初始化和初始化塊初始化可以通用。
構造方法在初始化的時候可以通過引數船隻,但是初始化塊不能,初始化塊的初始化在構造方法之前執行,如果搞糟方法多次過載,此時可以考慮構造方法中共通的**放到初始化塊中進行初始化。
靜態初始化塊和非晶態初始化塊的區別?
非靜態初始化塊主要是用於物件的初始化操作,在每次建立物件的時都要呼叫一次,其執行順序在構造方法之前。
在初始化塊之前有static修飾,則為靜態初始化塊。由於非靜態成員不能再靜態方法中使用,同樣也不能在靜態初始化塊中,因此,靜態初始化塊主要用於初始化靜態變數和靜態方法,靜態初始化塊只呼叫一次,是在類的第一次載入到記憶體時,並非一定要建立物件才執行,
靜態初始化塊比非靜態初始化塊先執行。
Java類成員初始化順序
首先看下這段測試 public class classloader 1.第二步,靜態變數和靜態 塊的載入順序由編寫先後決定 static int snum 4 2.第三步,靜態塊,然後執行靜態 塊,因為有輸出,故列印 static 4.第五步,按照順序載入匿名 塊,塊中有列印 5.第六步,按照順序載...
java類成員初始化順序
乙個類中,最首先被初始化的是靜態成員。只要乙個類建立物件或呼叫該類的靜態方法時靜態成員就都會被初始化,並且靜態資料在記憶體中只占用乙份儲存區域,無論建立多少個物件,靜態資料被所有物件共享。初始化靜態成員後再初始化非靜態成員。屬性 方法 構造方法和自由塊都是類的成員,在建立類物件時,類中各執行順序 b...
Java類成員的初始化順序
靜態成員 靜態變數 靜態初始化塊 變數 初始化塊 構造器 只要乙個類被使用 呼叫了類中的某個靜態方法或者是建立物件 這兩種情況表明該類被使用了。如果是有類的繼承關係,則優先執行父類中的成員,屬性及構造器,及初始化順序為 父類的靜態成員 子類的靜態成員 父類的變數 初始化塊 父類構造器 子類的變數 初...