JAVA面試題解惑系列(一) 類的初始化順序

2021-08-31 01:51:07 字數 1249 閱讀 4475

大家在去參加面試的時候,經常會遇到這樣的考題:給你兩個類的**,它們之間是繼承的關係,每個類裡只有構造器方法和一些變數,構造器裡可能還有一段** 對變數值進行了某種運算,另外還有一些將變數值輸出到控制台的**,然後讓我們判斷輸出的結果。這實際上是在考查我們對於繼承情況下類的初始化順序的了 解。 

我們大家都知道,對於靜態變數、靜態初始化塊、變數、初始化塊、構造器,它們的初始化順序以此是靜態變數》靜態初始化 塊》變數》初始化塊》構造器。我們也可以通過下面的測試**來驗證這一點:

public class initialordertest   

// 初始化塊

// 構造器

public initialordertest()

public static void main(string args)

}

執行以上**,我們會得到如下的輸出結果: 

靜態變數 

靜態初始化塊 

變數 

初始化塊 

構造 器 

這與上文中說的完全符合。那麼對於繼承情況下又會怎樣呢?我們仍然以一段測試**來獲取最終結果: 

class parent   

// 初始化塊

// 構造器

public parent()

}

public class subclass extends parent

// 初始化塊

// 構造器

public subclass()

// 程式入口

public static void main(string args)

}

執行一下上面的**,結果馬上呈現在我們的眼前: 

父類--靜態變數 

父類--靜態初始化塊 

子類--靜態變數 

子類--靜態初始化塊 

父類--變數 

父類--初始化塊 

父類--構造器 

子類--變數 

子 類--初始化塊 

子類--構造器 

現在,結果已經不言自明了。大家可能會注意到一點,那就是,並不是父類完全初始化完畢後才 進行子類的初始化,實際上子類的靜態變數和靜態初始化塊的初始化是在父類的變數、初始化塊和構造器初始化之前就完成了。 

了解了繼承情 況下類的初始化順序之後,如何判斷最終輸出結果就迎刃而解了。

JAVA面試題解惑系列(一) 類的初始化順序

大家在去參加面試的時候,經常會遇到這樣的考題 給你兩個類的 它們之間是繼承的關係,每個類裡只有構造器方法和一些變數,構造器裡可能還有一段 對變數值進行了某種運算,另外還有一些將變數值輸出到控制台的 然後讓我們判斷輸出的結果。這實際上是在考查我們對於繼承情況下類的初始化順序的了解。我們大家都知道,對於...

Java中的面試題 繼承與類載入

有a,b,main三個類如下 public class a public class b extends a public class main extends b private a a new a private b b new b public static void main string ...

Java 類的載入過程(阿里面試題)

載入方法不等於執行方法,初始化變數則會賦值 類載入順序應為 載入靜態方法 初始化靜態變數 執行靜態 塊 例項化時 先載入非靜態方法 例項化非靜態變數 執行構造 塊 執行建構函式 author panteng public class statictest 第六個載入 此時,n已經被初始化 所以列印出...