System.out.println()語句是否總是被執行?假設我有初始化塊
class c2
{
{
System.out.println("initializer");
}
public static void main(String a[])
{
System.out.println("main");
c2 ob1=new c2();
}
}
那麼爲什麼還要打印「初始化程序」語句?它是否是構造函數聲明?
System.out.println()語句是否總是被執行?假設我有初始化塊
class c2
{
{
System.out.println("initializer");
}
public static void main(String a[])
{
System.out.println("main");
c2 ob1=new c2();
}
}
那麼爲什麼還要打印「初始化程序」語句?它是否是構造函數聲明?
是的,它會打印:
main
initializer
一旦你撥打c2
。你的默認構造函數的構造函數爲c2
類你初始化將被稱爲隱含的樣子:
c2() {
{
System.out.println("initializer");
}
}
隨機附加大括號? – imulsion
@imulsion只是爲了突出塊。 – NINCOMPOOP
是的,它會的。如果您創建類的實例(c2 ob1=new c2();
),則默認構造函數將執行該命令。該程序也會輸出「main」,就像在main方法中調用一個新的命令一樣。
這是一個初始化實例成員塊
一個例子當創建C2對象,括號中的系統輸出命令也將被執行。 只要包含在一個塊中,您就可以像這樣添加初始化代碼。
請參見:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
爲什麼你會用嗎?
Java編譯器將初始化塊複製到每個構造函數中。 因此,這種方法可用於共享多個構造函數之間的代碼塊。
您可以通過以下方式更容易地在構造函數之間共享代碼:a)從另一個ctor調用一個ctor,和/或b)通過調用ctor的方法(最終是靜態方法)。這比初始化塊更可重用。 –
在某些情況下,輕鬆純粹是主觀的,也取決於您試圖解決的具體問題。還取決於編程級別,問題,編碼風格和知識。 「因此,這種方法**可以用來在多個構造函數之間共享一段代碼。「這是來自官方的oracle文檔 –
我添加了評論_not_,因爲你所說的東西是錯誤的,但是如果稍後有人會閱讀這個答案,它可以被理解爲初始化塊被推薦或至少被廣泛使用 –
sopln?我總是稱他們爲「syso」。這是一個標準的速記? –
你試過了嗎?結果是什麼? – sanbhat
在這種情況下是的。每次創建類的實例時都會執行實例初始化程序塊。 –