3

主方法.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();
    }
}

动物数据.java

public class animalsData{
    String name, l;

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

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

4

3 回答 3

6

你永远不会在你的班级中初始化你的animals数组。mainMethod

在你的public mainMethod()方法中,你需要做animals = new animalsData[INITIAL SIZE];

如果你想让它自动增长,你应该使用List. 即使那样你也不会使用this.animals.length + 1它作为它的索引。你会做List.add()

于 2012-08-31T17:42:22.680 回答
4
public List<animalsData> animals = new ArrayList<animalsData>()

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

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

于 2012-08-31T17:42:52.287 回答
1

1. Array 必须在其declared.

例如:

public animalsData[] animals; 


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

上面的代码给出了一个NullPointerException,因为animalsObject Reference Array VariableNull并且没有在堆上分配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而不是数组,它们非常灵活。

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

于 2012-08-31T17:49:25.530 回答