初期

2016-06-17 7 views
-1

私は私のJavaファイルに次のようなコードを持っている:初期

private ClassA() {} 
private static final ClassA groupA[] = new ClassA[5]; 


public ClassA getInstance() { 
    return groupA[2]; 
} 

私は明示的に個々のインスタンスを作成するためにコンストラクタを呼び出すようにするか、デフォルトのコンストラクタが自動的に呼び出されることになる必要がありますか?

このコードが5つの参照にスペースを割り当てて、それらをnullに初期化している場合、次のコードは無効です - private static final ClassA groupA[5];

+1

なぜあなたはそれを試してみませんか? –

答えて

0

おそらく、ClassAの初期化のたびに 'new'キーワードを使用していないためです。配列を初期化して保持するだけです。

2

個々のインスタンスを作成するためにコンストラクタを明示的に呼び出す必要がありますか、またはデフォルトのコンストラクタが自動的に呼び出されますか?

new!を使用して)コンストラクタを5回呼び出す必要があります。例えばそれは

private static final ClassA groupA[] = new ClassA[] { 
    new ClassA(), new ClassA(), new ClassA(), new ClassA(), new ClassA()}; 

または

private static final ClassA groupA[] = new ClassA[5]; 

static { // NB: this is a static initializer block! 
    for (int i = 0; i < groupA.length; i++) { 
     groupA[i] = new ClassA(); 
    } 
} 

このコードは5参照用のスペースを割り当て、nullにそれらを初期化するが、何もしていない場合、

... ...

次のコードはなぜですか無効ですか?

private static final ClassA groupA[5]; 

上記のコードは、さらに、アレイを作成していません。そして、それが行われていないので、おそらくstaticイニシャライザブロックが下がっていないので、staticは初期化できません。それはそれを役に立たないものにします。

第2の問題は、上記のコードが構文的に無効であることです。 Javaの配列宣言にはサイズを含めることはできません。サイズは、配列の初期化でのみ指定できます。ここで

は、上記の構文的に有効なバージョンです:

private static final ClassA groupA[]; 

またはより良い

private static final ClassA[] groupA; 

これら二つの形式は同じことを意味しますが、Javaのスタイルガイドラインは、それを使用するのはよくないと言います古いCのような構文です。そして、配列を初期化するという問題はまだ解決していないことに注意してください。

0

私は明示的にあなたがやったすべてがヌルの配列作られているので、はい、個々のインスタンス

を作成するためにコンストラクタを呼び出す必要があります。

なぜ次のコードが無効ですか? - private static final ClassA groupA [5];

オブジェクトの型が配列なので、そのコードの構文は正しくないため、サイズは宣言の一部ではありません。配列の初期化では、5はequalsの右側にあります。

0

各スロットは、あなたがどうなるクラスAのインスタンスを格納すると5つの要素を含む配列groupA作成する([0]グループAをグループAを[1]、..グループA [4]):

ClassA[] groupA = new ClassA[5]; 

Arrayサイズを変更することはできませんので、実際にはArrayListははるかに柔軟です。 リストは、より柔軟な道を提供します。

List<classA> groupList = List<classA>(); //Without inference 

または

List<classA> groupList = List<>(); //With inference (Java 8) 

今、あなたは配列に要素を追加する必要があります。

groupA[4] = generateClassA(); //adds instance of classA to fifth element of array. 

または

groupList.add(generateClassA()); //最初の要素をリストに追加します

YouTubeでDerek Banas Javaチュートリアルをチェックしてください - Javaに関するベストチュートリアルがあります。