在类构造函数中实例化ArrayList

ddk*_*ddk 1 java arraylist

我有一个课程如下:

package com.aci.golfgames;

import java.util.ArrayList;

public class Course {
    private String name;
    private int noOfTees;
    private ArrayList<Tee> tees;

    public Course(){
        // Build a course with some tees.
        name = "ABC Country Club";
        ArrayList<Tee> tees = new ArrayList<Tee>();
        tees.add(new Tee("White", 126, 70.4));
        tees.add(new Tee("Red", 128, 75.2));
        tees.add(new Tee("Blue", 126, 71.4));
        noOfTees = 3;
    }

    public String getCourseName(){
        return this.name;
    }
    public ArrayList<Tee> getTees(){
        return tees;
    }
    public int getNoOfTees(){
        return this.noOfTees;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试实例化ArrayList字段tees时,我似乎创建了一个不同于Object Course中声明为字段的ArrayList .IOW,this.teetees不同.如果我删除该行:

            ArrayList<Tee> tees = new ArrayList<Tee>();
Run Code Online (Sandbox Code Playgroud)

我在tees.add(...)的运行时得到一个空指针异常,我假设因为ArrayList尚未实例化.

这有什么不对?如何实例化ArrayList?注意:tees ArrayList中的条目数将从一个对象更改为另一个对象,因此ArrayList而不仅仅是一个数组.这里的代码只是定义一个测试课程.

谢谢.

Jer*_*vel 5

public Course(){
    ArrayList<Tee> tees = new ArrayList<Tee>();
}
Run Code Online (Sandbox Code Playgroud)

应该

public Course(){
    tees = new ArrayList<Tee>();
}
Run Code Online (Sandbox Code Playgroud)

通过ArrayList<Tee>在构造函数中再次定义它,您tees只将构造函数的范围缩小到构造函数,而其他方法使用的tees是在实例范围内定义的字段.

所以是的,它实际上会创建一个将在构造函数中使用的新列表.