2011-06-29 91 views
0

我正在開發一些java項目。 在這裏,我被困在這個問題,無法找出我要去哪裏錯了。空指針異常

我做了兩個類:TestChild

當我運行代碼時,我得到一個NullPointerException。

package com.test; 
public class Test { 

    child newchild = new child(); 
    public static void main(String[] args) { 
     new Test().method(); 
    } 
    void method() { 
     String[] b; 
     b = newchild.main(); 
     int i = 0; 
     while (i < b.length) { 
      System.out.println(b[i]); 
     } 
    } 
} 

package com.test; 
public class child { 
    public String[] main() { 
     String[] a = null; 
     a[0] = "This"; 
     a[1] = "is"; 
     a[2] = "not"; 
     a[3] = "working"; 
     return a; 
    } 
} 
+3

未來(甚至現在),你應該清楚地表明該行被拋出異常。該信息在異常的堆棧跟蹤中可用。 –

+3

...它按預期工作:它在'child#main()'中創建'NullPointerException' ;-) –

回答

13

這裏的問題:

String[] a = null; 
a[0]="This"; 

你立即試圖取消引用a,這是空,要想在它設置的元素。你需要初始化數組:

String[] a = new String[4]; 
a[0]="This"; 

如果你不知道你開始填充它(甚至常常如果你這樣做),我會建議使用某種形式的List之前您的收藏應該有多少元素都有。例如:

List<String> a = new ArrayList<String>(); 
a.add("This"); 
a.add("is"); 
a.add("not"); 
a.add("working"); 
return a; 

請注意,您在這裏有一個問題:

int i=0; 
while(i<b.length) 
    System.out.println(b[i]); 

你永遠改變i,所以它會永遠 0 - 如果你進入while循環可言,你永遠不會擺脫它。你想是這樣的:

for (int i = 0; i < b.length; i++) 
{ 
    System.out.println(b[i]); 
} 

或者更好:

for (String value : b) 
{ 
    System.out.println(value); 
} 
+1

Gees Jon!你已經打敗了我? –

4

這就是問題所在:

String[] a = null; 
a[0]="This"; 
0

他們強調你可能空指針異常的定義問題會給你知道未來什麼以及在哪裏可以找到問題。從java api文檔中,它定義了什麼是npe,以及在什麼情況下它會被拋出。希望它能幫助你。

當應用程序嘗試在需要對象的情況下使用null時拋出。這些包括:

* Calling the instance method of a null object. 
* Accessing or modifying the field of a null object. 
* Taking the length of null as if it were an array. 
* Accessing or modifying the slots of null as if it were an array. 
* Throwing null as if it were a Throwable value. 
0

封裝測試;

公共類測試{

child newchild = new child(); 

    public static void main(String[] args) { 

     new Test().method(); 
    } 
    void method() 
    { 
     String[] b; 
     b = newchild.main(); 
     int i=0; 
     while(i<b.length){ 
      System.out.println(b[i]); 
      i++; 
     } 
    } 

}

封裝測試;

公共類子{

public String[] main() { 

    String[] a = {"This","is","not","Working"}; 
    return a; 

}