我有一个自定义类" CarSharing",有一个属性" availableCars"。 ArrayList availableCars在构造函数中被初始化。 当我创建一个CarSharing对象并尝试在方法中调用ArrayList时,我得到一个java.lang.NullPointerException。
public class CarSharing {
private ArrayList<Car> availableCars;
public CarSharing() {
ArrayList<Car> availableCars = new ArrayList<Car>();
// I can use the List inside of the constructor
}
public void addAvailableCar(Car newCar) {
availableCars.add(newCar);
// Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at CarSharing.addVerfuegbaresAuto(CarSharing.java:12)
}
任何想法? 谢谢。
答案 0 :(得分:5)
您没有初始化您在构造函数中创建局部变量的availableCars。要修复它,只需在构造函数中删除ArrayList。
private ArrayList<Auto> availableCars;
public CarSharing() {
availableCars = new ArrayList<Car>();
}
答案 1 :(得分:1)
代码应该是这样的
public class CarSharing {
private ArrayList<Auto> availableCars;
public CarSharing() {
// use the class attribute directly in the constructor
// This way, each new object will have its own list of available cars
availableCars = new ArrayList<Car>();
}
public void addAvailableCar(Car newCar) {
availableCars.add(newCar);
}
}
现在,当你创建一个像下面的类
时CarSharing car = new CarSharing(); // This object will have a new arraylist initialized in it
car.addAvailableCar(...); // will work without any problem now
答案 2 :(得分:0)
问题是你试图在内存中给出一个位置之前使用一个变量。你已经声明了可用的汽车很好,但是你已经在构造函数中再次声明它是错误的。
您在类中声明的对象与构造函数中的对象无关。因此当你调用availableCars.add(newCar)时;它给出了空指针异常,因为您还没有定义可用的汽车。你刚宣布了它。
忘记构造函数中的availableCars,因为它已经成为构造函数本身的本地对象。
对于你的概念。
声明:您声明存在某些内容,例如类,函数或变量。你没有说出那个类或函数是什么样的,你只是说它存在。
定义:您可以定义某些内容的实现方式,例如类,函数或变量,即您说实际的内容。