2010-12-15 14 views
14

どの2つのコードフラグメントが、 要素の静的配列を正しく作成して初期化するか? (2つ選択してください。)整数配列の静的初期化

A.

static final int[] a = { 100,200 }; 

B.

static final int[] a; 
static { a=new int[2]; a[0]=100; a[1]=200; } 

C.

static final int[] a = new int[2]{ 100,200 }; 

D.

static final int[] a; 
static void init() { a = new int[3]; a[0]=100; a[1]=200; } 

答え:A、B

ここでもDは真実だと思うが、誰も私がなぜDが偽であるかを知らせることができる。

+1

これは有効なScheme、Ruby、Python、またはLISPコードではありません。コードを書式設定し、使用している言語/フレームワークを指定してください。 – leppie

+1

質問を実際に要約するようにタイトルを変更する必要があるかもしれません。 –

答えて

18

正解は1及び2(又はAとあなたの表記とB)であり、また、正しいソリューションは次のようになります。クラスはにつれて

static final int[] a = new int[]{ 100,200 }; 

溶液Dは、自動的にアレイをinitalizeありませんランタイムによってロードされます。静的メソッド(init)を定義するだけで、配列フィールドを使用する前に呼び出す必要があります。

+0

u floyd.urの説明には完璧な説明をありがとうございました。 – user516108

+0

その仕事は完璧です –

6

Dは、aを初期化するための静的メソッドを定義しますが、実際には呼び出しません。したがって、誰かが明示的にinitメソッドを呼び出さない限り、aは未初期化のままです。

他の回答として、final変数aに値を割り当てようとしているため、Dもコンパイルすべきではありません。私はそれがはるかに正しい説明だと思います。それにもかかわらず、aが最終的ではなかったとしても、余分なコードなしではまだ動作しません。

Dのnew int[3]は入力ミスですか? 2.

+0

本当に正しいです。私は答えを見つけました。Scjp .urの説明は正しいです。投票について – user516108

3

D(4)が偽である長さの配列を作成するすべての試み、他の三つの)aは最終であり、あなたがinitでそれを割り当てることができないからです。 b)initが呼び出される保証はありません。 c)initは3番目の要素を設定しません。

+2

なぜ?この回答は完全に正しいです。 –

+0

私はdownvoterではないが、私はそれが完全に正しいとは思わない。c) 'new int [3]'は、私が覚えている限り、すべての要素をゼロに初期化するので間違っています。私が間違っているなら私を訂正してください。 –

+0

@Sergeyあなたは間違っていませんが、(新しいところでは) '新しいint [3];は' int [2]; 'でなければならないと思いますので、私は脇見のコメントとして言いました。 DをFalseにする主な理由は、「a」が最終的なことです。 – khachik

1

スニペットCスニペットDの を初期化中に寸法(サイズ)を指定することはできません。最終変数を初期化する必要があります。後で初期化することはできません。

+0

ありがとうございました – user516108

0

コンストラクタの呼び出しが完了する前に、最終変数を初期化する必要があります。 "static void init()"はメソッド&であるため、コンストラクタの前には実行されません。最終変数は初期化されません。したがって、コンパイル時エラーです。

関連する問題