import java.util.ArrayList;
public class FriendList {
private ArrayList<String> friendList;
public FriendList() {
ArrayList<String> friendList = new ArrayList<String>();
}
public void addFriend(String friend) {
friendList.add(friend);
}
public String getFriends() {
return friendList.toString();
}
}
我尝试了一些东西,但似乎无法设法将字符串添加到数组列表中。任何想法为什么会这样?
答案 0 :(得分:10)
您的构造函数初始化了一个本地ArrayList
变量,因此您的friendList
成员永远不会被初始化。
当您尝试使用其他方法访问未初始化的成员时,您将获得NullPointerException
。
更改
public FriendList() {
ArrayList<String> friendList = new ArrayList<String>();
}
到
public FriendList() {
friendList = new ArrayList<String>();
}
答案 1 :(得分:7)
您隐藏了friendList
字段。
改为使用:
public FriendList() {
friendList = new ArrayList<String>();
}
在构造函数中,实例化一个局部变量friendList
。
答案 2 :(得分:2)
您没有初始化instace成员,而是创建并设置构造函数的本地列表。它在构造函数范围之外死掉。
所以基本上你是在尝试将字符串添加到尚未创建的列表中。
这篇文章要注意的另一件事是 Java将所有未初始化的对象/实例设置为null 因此异常。改变这个
public FriendList() {
ArrayList<String> friendList = new ArrayList<String>();
}
到
public FriendList() {
friendList = new ArrayList<String>();
}
答案 3 :(得分:0)
您在构造函数中创建的friendsList列表是一个隐藏全局friendsList的局部变量。因此,要立即解决您的问题,只需更换行
即可 ArrayList<String> friendList = new ArrayList<String>();
与
this.friendList = new ArrayList<String>();
之后,你必须看看variable scope principles.它们中的大部分都适用于所有编程语言
答案 4 :(得分:0)
或者你可以这样改变
public FriendList() {
ArrayList<String> friendList = new ArrayList<String>();
}
to
public FriendList() {
this.friendList = new ArrayList<String>();
}