为什么我的课会导致NullPointerException'当我尝试将字符串添加到我的ArrayList?

时间:2014-10-30 14:53:13

标签: java arraylist

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();
    }
}

我尝试了一些东西,但似乎无法设法将字符串添加到数组列表中。任何想法为什么会这样?

5 个答案:

答案 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>();
}