java,實例初始化塊,靜態初始化塊,clone方法

今天無聊,看了一下java語言基礎知識,對 實例初始化塊,靜態初始化塊 的執行順便,有了一點了解,便記下來,方便以後查閱。

在一個類定義中,初始化塊,就是一塊用 { }  大括號括起來的代碼段。但“實例初始化塊”只是單單的 大括號,當每次創建一個類的實例時,在調用構造方法前,會先執行這段“實例初始化塊”,看到這,應該大概明白“實例初始化塊”的主要作用了吧?當你在一個類的不同構造方法內,有許多相同的代碼段,那麼,這些代碼就可以單獨提取出來,放在一個“實例初始化塊裏”,那麼,每次創建一個對象時,就都會執行一次那代碼塊。

而相對於“靜態初始化塊”,其只是在 大括號前面加了個 static,形如 : static{ //--code },但在靜態初始化塊裏,只能允許訪問所在類的靜態成員(包括方法),當然,也可以在初始化塊裏聲明局部變量(但不能是static類型的)。而靜態初始化塊的作用就是當JVM在裝載類的,你想讓它做一些事情,那麼,就可以用靜態初始化塊。

現在說重點:這幾者的執行順序:

(JVM在裝載類時)先裝載類的靜態成員,再執行靜態初始化塊(同樣,當一個類有繼承自某類時,則會先裝載該父類,那麼,父類的裝載或執行順序,也都如句子所述)。

(在創建類的實例時)先執行實例初始化塊,再執行構造方法;但對於一棵繼承樹中,會先調用父類的構造方法,那麼其執行順序也如句子所述。

需要注意的是:

1.當你調用了一個對象的clone方法,結果是:不會再執行初始化塊,只會執行構造方法。

2.當一個類有多個初始化塊時,其執行的順序是從上到下執行。

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