[英]What is this java.lang.NullPointerException?
我编写了一个简短的脚本来了解Java数组:
class Dog {
String name;
void bark() {
System.out.println(name + " is barking");
}
void eat() {
System.out.println(name + " is eating");
}
}
class mypets {
public static void main(String [] args) {
Dog dogA = new Dog();
dogA.name="Lassy";
dogA.bark();
dogA.eat();
Dog[] myDogs = new Dog[3];
myDogs[0].name = "Barney";
myDogs[0].bark();
}
}
然后我编译并运行我的程序:
C:\Java>javac mypets.java
C:\Java>java mypets
Lassy is barking
Lassy is eating
Exception in thread "main" java.lang.NullPointerException
at mypets.main(mypets.java:22)
我做错了什么? 我尝试使用谷歌搜索可怕的“java.lang.NullPointerException”但老实说我现在很困惑。
数组就像一排可以容纳物体的盒子; 但是,在创建数组时,这些框是空的。 NullPointerException
是Java告诉你的方式。 所以,当你说的时候
Dog[] myDogs = new Dog[3];
myDogs[0].name = "Barney";
你想设置的名Dog
在第一个框,但没有这样的Dog
-盒子是空的。 你需要把一只Dog
放在盒子里才能完成这项工作:
Dog[] myDogs = new Dog[3];
myDogs[0] = new Dog();
myDogs[0].name = "Barney";
然后它会工作。
初始化数组时,会为数组的每个元素分配一个默认值。 对于对象,默认值为null。 在null
引用上调用方法会导致NullPointerException
。 您必须使用new
实例化每只Dog
Dog[] myDogs = new Dog[3];
myDogs的每个元素都被赋值为null。
for(int i = 0; i < myDogs.length; i ++) {
myDogs[i] = new Dog();
}
NullPointException
基本上意味着您正在尝试引用尚未初始化的对象...
在你的代码中,你正在......
Dog[] myDogs = new Dog[3];
这将创建一个可以包含3个Dog
元素的数组,它不会创建Dog
任何实例,所以当你这样做时......
myDogs[0].name = "Barney";
myDogs[0].bark();
myDogs[0]
实际上是null
。
相反,您需要在尝试访问它之前首先将新Dog
分配给元素。
myDogs[0] = new Dog();
myDogs[0].name = "Barney";
myDogs[0].bark();
您可能希望阅读有关更多详细信息的数组
您需要初始化Array中的每个引用。 以下是编辑过的代码。
见这和此获取更多信息。
class Dog {
String name;
void bark() {
System.out.println(name + " is barking");
}
void eat() {
System.out.println(name + " is eating");
}
}
class mypets {
public static void main(String [] args) {
Dog dogA = new Dog();
dogA.name="Lassy";
dogA.bark();
dogA.eat();
Dog[] myDogs = new Dog[3];
//Lines Added
for(int i=0; i<3; i++)
myDogs[i] = new Dog();
//End
myDogs[0].name = "Barney";
myDogs[0].bark();
}
}
您需要先创建对象并放入数组,然后才能使用它。
喜欢
Dog[] myDogs = new Dog[3];
myDogs[0] = new Dog();
myDogs[0].name = "Barney";
myDogs[0].bark();
NullPointerException
表示你(你的引用变量)指向null(对象)是一个例外,但你打算对它做一些操作(这应该是错误的)。
简单来说,如果声明一个变量而不指定一个对象则指向null
MyClass myRef;//equivalent to MyClass myRef = null;
然后尝试对它进行一些操作
myRef.doSomething(); //it's a null pointer exception
然后你得到NullPointerException
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.