您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Java程序初始化順序是怎么樣的”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java程序初始化順序是怎么樣的”這篇文章吧。
Java程序的初始化一般遵循三個原則(優先級依次遞減):
1,靜態對象(變量)優先于非靜態對象(變量)初始化,其中,靜態對象(變量)只初始化一次,而非靜態對象(變量)可能會初始化很多次。
2,父類優先于子類進行初始化。
3,按照成員變量的定義順序進行初始化。即使變量定義散布于方法定義之中,它們依然在任何方法被調用之前先初始化。
Java程序初始化工作可以在許多不同的代碼塊中完成(例如靜態代碼塊,構造函數等),它們的執行順序如下:
父類靜態變量
父類靜態代碼塊
子類靜態變量
子類靜態代碼塊
父類非靜態變量
父類非靜態代碼塊
父類構造函數
子類非靜態變量
子類非靜態代碼塊
子類構造函數。
下面給出一個不同模塊初始化時執行順序的一個例子:
class Base{ static { System.out.println("Base static block"); } public Base(){ System.out.println("Base constructor"); } public class Derived extends Base{ static{ System.out.println("Drevied static block"); } { System.out.println("Drevied block"); } public Derived(){ System.out.println("Drevied constructor"); } public static void main(String args[]){ new Derived(); } }
先自己利用上面給出的執行順序進行判斷:
程序的運行結果為:
Base static block
Derived static block
Base block
Base constructor
Derived block
Derived constructor
怎么樣,運行結果是否與你的結果一致呢?
最后,我們再來看一道面試真題:
下列代碼運行結果是什么?
class B extends Object{ static{ System.out.println("Load B1"); } public B(){ System.out.println("Create B"); } static{ System.out.println("Load B2"); } } class A extends B{ static{ System.out.println("Load A"); } public A(){ System.out.println("Create A"); } } public class Testclass{ public static void main(String[ ] args){ new A(); } }
運行結果是:
Load B1 LoadB2 Load A Create B Create A
在面試中出現的執行順序的問題,無非也就是把上面的代碼再換幾個形式,但,萬變不離其宗,只要掌握它的執行順序的規律,所有問題就都可以迎刃而解了
以上是“Java程序初始化順序是怎么樣的”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。