Java获取nullpointerexception

Java获取nullpointerexception,java,nullpointerexception,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 =

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中的异常

您从未在
main方法
类中初始化
动物
数组

在您的
public main方法()
方法中,您需要执行
animals=new animaldata[初始大小]

如果您想让它自动增长,应该使用
列表
。即使这样,您也不会使用
this.animates.length+1
作为索引。您只需执行
List.add()

public List animals=new ArrayList()
公共方法(){
添加(新动物数据(“猫”,“4”));
}

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

1。
数组
声明时必须初始化

例如:

public animalsData[] animals; 


    public static void main(String[] args) {
        mainMethod run = new mainMethod();
        System.out.println(run.animals.length);
    }
上面的代码给出了一个
NullPointerException
,原因
animals
,它是一个
对象引用数组变量
Null,并且未分配堆上的
数组对象

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 animals=new ArrayList()

动物
未分配值。既然您知道问题所在,请删除和/或帮助我解决此问题。(还有很多这样的相关问题。试着先搜索关于可能错误的“想法”)你在哪里初始化
animals
?this.animals是
null
,因此无法访问长度属性。另外,
arr[arr.length+1]
在Java中永远无效,因为数组有固定的长度。实际上,它是一个数组而不是一个对象,所以他完全错了-/@灰色-根据规范,是的。但是OP对于语言来说显然是新的,因为您以不同的方式实例化数组和对象(
newobject()
newint[5]
),所以最好保持简单。最好提供一个替代解决方案,但是你应该提到他所遇到的错误的真正原因。我已经看到了另一个解释这个问题的答案,为什么要重新发明轮子?:)
public animalsData[] animals = new animalsData[10]; 


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