2014-01-20 41 views
1

我已經創建了下面的類來明確我不明白的地方,它實際上並不會用於任何事情。從實例化的Java數組中讀取拋出NullPointerException而不是返回0

public class A 
{ 
    private int[] items; 

    public A() 
    { 
     int[] items = new int[7]; 
    } 

    public int first() 
    { 
     return items[0]; 
    } 
} 

所以,當我們創建了一個新的實例,數組「項目」將成爲與7

容量的陣列當調用第一()方法,它要求的值int變量在數組的第一個位置。由於我們沒有給這個int一個實際值,所以根據http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,將被存儲的默認值是「0」。

然而,當我實際調用該方法,而不是返回0時,我收到一個nullpointerexception。爲什麼是這樣?

[編輯] 由於某種原因無法回覆對我自己的問題的評論... 但是,感謝您的幫助! 如果別人有類似的問題,它仍然不是很清楚出了什麼問題:

我已經聲明,但沒有初始化一個變量「項目」,可以容納一個整數數組。
現在,在構造函數中,不是初始化我的原始變量,而是剛剛聲明瞭一個新變量「items」(它只存在於構造函數中,然後消失),然後將其初始化爲7個整數的數組。
現在,當調用「第一個」方法時,它會嘗試查找我的原始「items」數組的第一個位置上的內容,因爲這是當前存在的唯一「items」數組。但我沒有初始化該數組,這意味着沒有數組,只有一個變量。因爲返回了nullpointerexception。

+3

不,你的陰影場。 –

回答

4

public A() 
{ 
    int[] items = new int[7]; 
} 

應該

public A() 
{ 
    this.items = new int[7]; 
} 

否則你聲明和初始化使用相同的名稱爲您的實例字段不同的變量。

1

變化

int[] items = new int[7]; 

this.items = new int[7]; 
相關問題