是什麼下面的代碼實際上做?Java類初始化
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是創建MyClass實例,然後調用它的內部方法嗎?
我有一種感覺,它更多的東西,比如,創建一個稱爲初始化塊的方法的匿名類。
任何人都可以提供解釋?
是什麼下面的代碼實際上做?Java類初始化
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是創建MyClass實例,然後調用它的內部方法嗎?
我有一種感覺,它更多的東西,比如,創建一個稱爲初始化塊的方法的匿名類。
任何人都可以提供解釋?
此代碼創建一個匿名子類的MyClass
的一個實例。它包含一個實例初始化塊,在實例創建時執行。
它等同於:
public class SubClass extends MyClass
{
{
setName("A");
setAge(20);
}
}
MyClass desc = new SubClass();
(除了事實是,這裏的子類不是匿名的)。
而這個代碼就相當於:
public class SubClass extends MyClass
{
public SubClass()
{
super();
setName("A");
setAge(20);
}
}
MyClass desc = new SubClass();
因爲實例初始化塊被複制到類的每個構造的開始。
它只是創建MyClass實例,然後調用其上的內部方法 ?
實例初始化塊用於初始化實例數據成員。
{
setName("A");
setAge(20);
}
關於初始化塊和構造函數的執行順序有一定的規則。讓我們先列出它們並通過編寫一個簡單的程序進行驗證。
Initialization blocks run in the order they appear in the program.
Instance initialization blocks run whenever a new instance of class is created.
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html – Maroun