为什么我们不用创建新的ArrayList对象就可以使用ArrayList的方法?

时间:2019-06-17 15:34:38

标签: java arraylist collections

我们必须创建任何类的对象才能使用其功能,除非这些功能是静态功能。但是为什么我们不需要创建ArrayList对象来使用其方法(例如add,contains等)。

ArrayList<Egg> myList = new ArrayList<Egg>();
myList.add(a);

根据我的理解,myList只是一个变量,它保存ArrayList类类型的ArrayList对象的引用。再次,我们如何在不将对象传递给myList的情况下编写以下内容。

ArrayList<Egg> myList;
myList.add(a);

完整代码:

import java.util.ArrayList;

public class DotCom {
    private ArrayList<String> locationCells;

    public void setLocationCells(ArrayList<String> loc)
    {
        locationCells = loc;
    }

    public String checkYourself(String userInput)
    {
        String result = "miss";
        int index = locationCells.indexOf(userInput);
        if (index >= 0) {
            locationCells.remove(index);
            if (locationCells.isEmpty()) {
                result = "kill";
            }
            else
            {
                result = "hit";
            }
        }
        return result;
    }

    //TODO:  all the following code was added and should have been included in the book
    private String name;
    public void setName(String string) {
        name = string;
    }
}

PS 我指的是第一本Java书。

1 个答案:

答案 0 :(得分:1)

在setter方法中设置了ArrayList引用:

public void setLocationCells(ArrayList<String> loc)
{
    locationCells = loc;
}

如果未调用此方法,并且在尝试使用ArrayList之前未设置引用,则代码将引发NullPointerException。

旁注:这看起来不是安全的代码,因为它可以容易错误地运行,因此很容易创建NPE。最好在构造函数中设置ArrayList(List甚至更好)。