Java arrayList添加声明中出现空指针异常错误

Java arrayList添加声明中出现空指针异常错误,java,arraylist,nullpointerexception,Java,Arraylist,Nullpointerexception,当我试图在testClass中使用sentMessages方法时,我在receiverUser.privateMessageList.add(privateMessage)行中遇到了NullpointerException错误 甚至我也初始化了“privateMessageList”列表。我如何处理这个问题 public class User { private String userName; private String password; private Stri

当我试图在
testClass
中使用
sentMessages
方法时,我在
receiverUser.privateMessageList.add(privateMessage)行中遇到了
NullpointerException
错误 甚至我也初始化了“privateMessageList”列表。我如何处理这个问题

public class User {

    private String userName;
    private String password;
    private String firstName;
    private String lastName;
    private String userType;
    int topicCount = 0;
    final int maxTopicNumber = 5;

    ArrayList<PrivateMessage> privateMessageList;

    public User(String userName, String password, String firstName, String lastName, String user_type) {
        this.userName = userName;
        this.password = password;
        this.firstName = firstName;
        this.lastName = lastName;
        this.userType = "USER";

    }
    //private message section
    public PrivateMessage sentMessage(String newMessage, User receiverUser) {
        privateMessageList = new ArrayList<>();
        PrivateMessage privateMessage = new PrivateMessage(this.userName, newMessage);
        receiverUser.privateMessageList.add(privateMessage);
        System.out.println("Message sent successfully!");
        return privateMessage;
    }

    public void ListMessages(User receiverUser) {
        System.out.println("Inbox of " + receiverUser);
        for (int i = 0; i < receiverUser.privateMessageList.size(); i++) {
            System.out.println(receiverUser.privateMessageList.get(i));
            System.out.println("Sent by: " + this.userName);
        }
    }
公共类用户{
私有字符串用户名;
私有字符串密码;
私有字符串名;
私有字符串lastName;
私有字符串用户类型;
int-topicCount=0;
最终整数maxTopicNumber=5;
ArrayList privateMessageList;
公共用户(字符串用户名、字符串密码、字符串名、字符串名、字符串用户类型){
this.userName=用户名;
this.password=密码;
this.firstName=firstName;
this.lastName=lastName;
this.userType=“USER”;
}
//私人信息部分
public PrivateMessage sentMessage(字符串newMessage,用户receiverUser){
privateMessageList=newArrayList();
PrivateMessage PrivateMessage=新的PrivateMessage(this.userName,newMessage);
receiverUser.privateMessage list.add(privateMessage);
System.out.println(“消息发送成功!”);
返回私信;
}
公共无效列表消息(用户接收方用户){
System.out.println(“收件箱”+接收方用户);
对于(int i=0;i
如果您创建了一个
用户
而没有调用
sentMessage
方法,您的
私有消息列表
将不会被创建,因此执行任何列表方法都将导致NPE

因此,在构造函数或内联中初始化privateMessageList

List<PrivateMessage> privateMessageList =new ArrayList<>();

其次,如果您在sentMessage方法中创建privateMessageList,则列表将始终具有单个元素。因为另一个方法调用将删除以前的列表。这似乎是一个错误。

您没有初始化
privateMessageList

在构造函数中初始化它,使其始终处于初始化状态

您的
sentMessage()
方法初始化
privateMessage列表
。但它不初始化(也不应该)接收方用户的列表
。 每个用户都有自己的列表。初始化一个用户的列表不会初始化另一个用户的列表


在构造函数中初始化它使一切变得更简单、更安全:用户没有理由拥有空列表。

替换此receiverUser.privateMessageList.add(privateMessage);以 privateMessage list.add(privateMessage)


在实例初始值设定项块或构造函数内部创建ArrayList对象。

在构造函数内部放置“privateMessageList=new ArrayList();“谢谢!没有看到您的评论,对此我很抱歉,谢谢!”用户没有理由拥有空列表--延迟初始化以节省内存可能是一个原因。好的。这可能是一个原因,但不是一个好的原因。这是过早的优化,特别是当你是一个学习基础知识的新手时。非常感谢,我是一个新手,所以我在编码时挣扎了很多,但在初始化“privateMessageList”时解决了在构造函数中。再次感谢。在构造函数中初始化arrayList很有效。非常感谢!非常有效,谢谢先生!很高兴提供帮助/。但是请记住,GC不会删除添加到privateMessageList的所有消息,这会导致内存问题。因此,您需要一个清理此列表的时间点。
public PrivateMessage sentMessage(String newMessage, User receiverUser) {
    PrivateMessage privateMessage = new PrivateMessage(this.userName, newMessage);
    receiverUser.privateMessageList.add(privateMessage); // list is already created
    System.out.println("Message sent successfully!");
    return privateMessage;
}