Java获取nullpointerexception
mainMethod.javaJava获取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 =
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);
}