空指针异常

时间:2011-06-29 05:19:26

标签: java

我正在研究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;
    }
}

4 个答案:

答案 0 :(得分:13)

问题在于:

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

您要立即尝试取消引用a(null),以便在其中设置元素。您需要初始化数组:

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 :(得分:4)

这是问题所在:

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

答案 2 :(得分:0)

他们强调了你的问题可能是空指针异常的定义会让你知道将来在什么地方和哪里找到问题。从java api doc,它定义了什么是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. 

答案 3 :(得分: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;

}