Java - 具有初始化ArrayList的NullPointerException

时间:2016-02-06 12:58:11

标签: java arraylist nullpointerexception

我有一个自定义类" 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)
  }

任何想法? 谢谢。

3 个答案:

答案 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,因为它已经成为构造函数本身的本地对象。

对于你的概念。

声明:您声明存在某些内容,例如类,函数或变量。你没有说出那个类或函数是什么样的,你只是说它存在。

定义:您可以定义某些内容的实现方式,例如类,函数或变量,即您说实际的内容。