2013-10-29 171 views
2

「Java編譯器將初始化塊複製到每個構造函數中,因此,這種方法可用於在多個構造函數之間共享代碼塊。初始化塊實例變量

我已閱讀此此教程:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

  1. 我不明白這一點。當初始化塊存在並執行構造函數時,構造函數的需要是什麼,換句話說,作爲構造函數的替代方法工作?

  2. 哦,但創建實例時必須調用構造函數。好!但那麼初始化塊的需求是什麼?

  3. 「因此,此方法可用於在多個構造函數之間共享代碼塊。」 有人請給我一個例子嗎?我的意思是我不明白。

在此先感謝您。

+0

對於3)我認爲這意味着這樣的事情: '''類Foo { 私人詮釋吧= 10; private int baz = 20; 公共美孚(){} 公共美孚(美孚anotherFoo){}} ''' 你並不需要在這兩個構造函數初始化的變量。 – Danstahr

+0

[使用初始化器的構造VS Java中] [1] [1]:http://stackoverflow.com/questions/804589/use-of-initializers-vs-constructors-in-java 希望它有幫助 – Jabir

回答

0

我不明白。當初始化程序塊 存在並執行構造函數的工作時,構造函數需要什麼,換句話說 可用作構造函數的替代方法?

只有構造函數創建對象而不是初始化塊,因此構造函數是必需的。

哦,但創建實例時必須調用構造函數。行! 行!但那麼初始化塊的需求是什麼?

當您的類中有不同的構造函數時,您可以使用初始化塊保存重複的代碼。

+0

我們如何保存重複的代碼?構造函數是否包含初始化塊或者是否隱含地調用它們? 是的我已經讀過,java編譯器將所有初始化塊複製到每個構造函數中。 java編譯器是否隱式地自動執行而不告訴我,還是必須在構造函數中編寫一些代碼,以便初始化塊在那裏被複制。 – user2882662

+0

@ user2882662 Java編譯器將執行將初始化程序代碼複製到構造函數的工作。你可以放鬆一下,享受java編譯器爲你完成的工作。研究生成的代碼應該有助於讓你更清晰。 –

0

初始化塊的唯一真正需求是static變體,它允許您執行更復雜的static final變量初始化。

構造函數和初始化塊之間的區別在於構造函數構造對象,並且初始化塊被複制到每個構造函數中的。如果你沒有指定構造函數(即使你指定了一個初始化塊),編譯器仍然會生成一個默認構造函數來處理對象構造。

你可以有不同的構造執行不同代碼,但不顧一切初始化語句塊被執行,其中構造函數被調用。你當然可以寫一個private方法來和你的初始化塊相同,並且讓你的代碼更具可讀性,但是與初始化塊不同,你需要從你的構造函數手動調用它們。