2010-12-15 90 views
14

哪兩個代碼段正確創建並初始化一個int 元素的靜態數組? (選擇兩項。)整型數組靜態初始化

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 2010-12-15 12:39:04

+1

您可能需要更改標題,以便它實際上總結了這個問題。 – 2010-12-15 12:39:27

回答

18

正確的答案是1和2(或A和B與您的符號),以及也是正確的解決辦法是:

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

解d不會自動initalize陣列,作爲類獲取由運行時加載。它只是定義了一個靜態方法(init),你必須在使用數組字段之前調用它。

+0

謝謝你floyd.ur解釋聽起來很完美。 – user516108 2010-12-16 07:30:33

+0

其工作完善 – 2016-02-14 09:25:24

6

D定義了一個初始化的靜態方法a但實際上並沒有調用它。因此,a保持未初始化,除非有人明確調用init方法。

正如其他答案指出的那樣:D甚至不應該編譯,因爲它試圖爲final變量a賦值。我想這是一個更正確的解釋。儘管如此,即使a不是最終的,如果沒有額外的代碼,D仍然無法工作。

我認爲D中的new int[3]是一個錯字?其他三個所有嘗試創建長度的數組2.

+0

你是否真的正確。我找到答案我Scjp .ur解釋是正確的。不要介意選票 – user516108 2010-12-16 07:19:33

3

d(4)爲假,因爲:a)a是最終的,你不能在init分配給它; b)不保證init將被稱爲; c)init沒有設置第三個元素;

+2

爲什麼在這個世界上被低調投票?這個答案完全正確。 – 2010-12-15 12:55:46

+0

我不是downvoter,但我認爲這不完全正確。c)是不正確的,因爲'new int [3]'將所有元素初始化爲零,據我記憶。如我錯了請糾正我。 – 2010-12-15 16:38:26

+0

@Sergey你沒有錯,我提到它作爲一個評論,因爲我認爲(在某些地方提到)'new int [3];'應該是'int [2];'。導致D錯誤的主要原因是'a'是最終的。 – khachik 2010-12-15 17:17:54

1

對於代碼片段C在爲片段D初始化 時,您無法給出尺寸(Size),因此應初始化最終變量。它以後不能被初始化。

+0

謝謝你。好的解釋 – user516108 2010-12-16 07:28:40

0

在構造函數調用完成之前,應該初始化最終變量。由於「static void init()」是一個方法&它不會在構造函數之前運行,所以最終變量不會被初始化。因此這是一個編譯時錯誤。