用单个文件编写的java应用程序引发NullPointerException
无法理解,如果我将类拆分为不同的文件并将它们声明为公共的,我对抽象类getOn
方法有问题,就像这样
package test.local;
abstract public class Passenger {
public void getOn(Transport transport) {
transport.takePassenger(Passenger.this);
}
}
package test.local;
public class Dog extends Passenger {
}
一切正常,我可以将Passenger.this
传递给getOn
方法,但如果我在单个文件中编写整个应用程序,就像这样
import java.util.List;
interface Transport {
public void takePassenger(Passenger passenger);
}
class Bus implements Transport {
private List<Passenger> passengers;
public void takePassenger(Passenger passenger) {
passengers.add(passenger);
}
public List<Passenger> getPassenger() {
return passengers;
}
}
abstract class Passenger {
public void getOn(Transport transport) {
transport.takePassenger(Passenger.this);
}
}
class Dog extends Passenger {
}
public class Magic {
public static void main(String []args) {
Bus bus = new Bus();
Dog passenger = new Dog();
passenger.getOn(bus);
}
}
我在线程“main”java中遇到异常。lang.NullPointerException 为什么?
Exception in thread "main" java.lang.NullPointerException
at Bus.takePassenger(Magic.java:11)
at Passenger.getOn(Magic.java:21)
at Magic.main(Magic.java:35)
# 1 楼答案
在初始化列表之前,它将始终抛出NullPointerException:
到
# 2 楼答案
改变这一点:
为此:
在前一行代码中,您尚未将
passengers
初始化为值,因此它为空。尝试去引用它,例如使用passengers.add(passenger)
,将产生NullPointerException# 3 楼答案
这是因为您尚未初始化
在总线类中创建一个默认构造函数,如下所示:
# 4 楼答案
需要在
Bus
类中初始化passengers
字段。更改此声明:致:
将类移动到不同的文件与您报告的错误无关