Java获得nullpointerexception

时间:2012-08-31 17:40:10

标签: java nullpointerexception

mainMethod.java

public class mainMethod{
    public animalsData[] animals;

    public mainMethod(){
        animals[this.animals.length + 1] = new animalsData("CAT", "4");

    }

    public static void main(String[] args) {
        mainMethod run = new mainMethod();
    }
}

animalsData.java

public class animalsData{
    String name, l;

    public animalsData(String name, String l) {
        super();
        this.name= name;
        this.l= l;
    }
}

我有这个问题:线程“main”中的异常java.lang.NullPointerException

3 个答案:

答案 0 :(得分:6)

您永远不会在animals课程中初始化mainMethod数组。

public mainMethod()方法中,您需要执行animals = new animalsData[INITIAL SIZE];

如果您希望自动增长,则应使用List。即使这样,你也不会使用this.animals.length + 1作为索引。你只需List.add()

答案 1 :(得分:4)

public List<animalsData> animals = new ArrayList<animalsData>()

public mainMethod(){
    animals.add(new animalsData("CAT", "4"));
}

了解有关Java列表的更多信息,默认情况下,数组不可扩展。如果在数组的最后一项之后添加项目,则无法扩展超出维度。

答案 2 :(得分:1)

1。 Array 必须初始化 declared

<强>例如

public animalsData[] animals; 


    public static void main(String[] args) {
        mainMethod run = new mainMethod();
        System.out.println(run.animals.length);
    }

上面的代码提供NullPointerException,因为animals Object Reference Array Variable 未分配 {在堆上{1}}。

Array Object

以上代码工作正常......因为现在已初始化数组。

我建议您使用public animalsData[] animals = new animalsData[10]; public static void main(String[] args) { mainMethod run = new mainMethod(); System.out.println(run.animals.length); } 代替数组,它们非常灵活。

java.util.Collections