2011-10-10 48 views
0
這裏

的Java初學者是誰,爲什麼解釋爲什麼實例化對象的數組中的元素需要一種方法裏面做

1)這是有效非常困惑:

public class MyArrayOfObjects { 

    MyArrayOfObjects[] myArray = new MyArrayOfObjects[5]; 

    void InstantiateElements(){ 
     myArray[0] = new MyArrayOfObjects(); 
    } 
} 

2),而這是不

public class MyArrayOfObjects { 

    MyArrayOfObjects[] myArray = new MyArrayOfObjects[5]; 

    myArray[0] = new MyArrayOfObjects(); 

} 

從我的理解中,對象數組的每個元素都實例化一個MyArrayOfObjects對象。那麼爲什麼選項1工作,而2不工作?

+0

「選項2工作,而1不工作」?你確定? – smp7d

+0

不應該是「那麼爲什麼選項1工作,而2不工作?」? –

+0

你是正確的。抱歉混淆。現在修好 – user582485

回答

2

語句必須發生在:

  • 方法
  • 構造
  • 初始化程序塊

在你的代碼第二塊,該語句將值分配給所述第一數組的元素是而不是是一個變量聲明,所以它不能直接在類中出現。

至於爲什麼Java是這樣設計的 - 在我看來,它只是讓事情變得更簡單。您應該將邏輯作爲初始化的一部分執行到構造函數中。 (我一般會盡量避免初始化語句塊爲好,因爲它很容易在調試的時候忘了這點。)

section 8.1.6 of the Java Language Specification

一類主體可以包含類成員的聲明,即,字段(§8.3),類(§8.5),接口(§8.5)和方法(§8.4)。類體還可以包含類的實例初始值設定項(§8.6),靜態初始值設定項(§8.7)和構造函數聲明(§8.8)。

3

myArray[0] = new MyArrayOfObjects();是一條語句–一行可執行文件代碼。
語句只能出現在方法或初始化塊中。

類定義只能包含聲明(字段,方法,構造函數,內部類),而不是語句。
字段也可以有初始值設定項。

比變量聲明其他
0

你必須把這個行:

myArray[0] = new MyArrayOfObjects();

成一個構造函數。類體不能包含語句,只是聲明。

+0

好吧,不一定非得在構造函數中。也可以是普通方法或初始化塊。 – smp7d

0

不完全是爲什麼的答案,這已被回答,但作爲補充。您可以使用數組初始值設定項初始化您的數組聲明:

public class MyArrayOfObjects { 

    MyArrayOfObjects[] foo = new MyArrayOfObjects[] { new MyArrayOfObjects(), null, null, null, null }; 
} 
相關問題