我有一个课程如下:
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.tee与tees不同.如果我删除该行:
ArrayList<Tee> tees = new ArrayList<Tee>();
Run Code Online (Sandbox Code Playgroud)
我在tees.add(...)的运行时得到一个空指针异常,我假设因为ArrayList尚未实例化.
这有什么不对?如何实例化ArrayList?注意:tees ArrayList中的条目数将从一个对象更改为另一个对象,因此ArrayList而不仅仅是一个数组.这里的代码只是定义一个测试课程.
谢谢.
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是在实例范围内定义的字段.
所以是的,它实际上会创建一个将在构造函数中使用的新列表.
| 归档时间: |
|
| 查看次数: |
4163 次 |
| 最近记录: |