当前位置:  开发笔记 > 编程语言 > 正文

为什么我会得到这个NullPointerException?

如何解决《为什么我会得到这个NullPointerException?》经验,为你挑选了2个好方法。

我有一个包含属性的类User:nickname,ipAddress,sharedFolder.我们的想法是让拥有这些属性的用户和来自共享文件夹的文件列表.

这是我的代码:

import java.io.*;
import java.util.*;

public class User {

    String nickname;
    String ipAddress;
    static ArrayList listOfFiles;
    File sharedFolder;
    String fileLocation;

    public User(String nickname, String ipAddress, String fileLocation) {

        this.nickname = nickname.toLowerCase();
        this.ipAddress = ipAddress;
        sharedFolder = new File(fileLocation);

        File[] files = sharedFolder.listFiles();
        listOfFiles = new ArrayList();

        for (int i = 0; i < files.length; i++) {
            listOfFiles.add(i, files[i].toString().substring(fileLocation.length()));
        }
    }

    public static void showTheList() {
        for (int i = 0; i < listOfFiles.size(); i++) {
            System.out.println(listOfFiles.get(i).toString());
        }
    }

    @Override
    public String toString() {
        return nickname + " " + ipAddress;
    }

    public static void main(String[] args) {
        showTheList();
    }
}

但是,当我运行它时,我无法获取文件列表.它引发了一个异常:

User.main中的User.showTheList(User.java:35)中的线程"main"java.lang.NullPointerException中的异常(User.java:52)Java结果:1

我知道这可能是一个小小的错误,但我似乎无法解决它:(请帮忙.



1> missingfakto..:

listOfFiles 作为静态字段应该在静态块中初始化,而不是构造函数.

static{
    listOfFiles = new ArrayList();
}

或者你也可以在声明本身的网站上初始化它.

static ArrayList listOfFiles = new ArrayList();

在您的代码中,您不是在创建类的任何对象,因此listOfFiles永远不会为引用分配ArrayList实例.这就是你得到一个原因的原因NullPointerException.



2> Steve B...:

你的"showTheList"函数假设已经填充了listOfFiles.但是,在运行User构造函数之前,不会创建该变量.

作为一种实践,在实例构造函数中初始化静态变量不是一个好主意.如果以这种方式进行,则不清楚数据属于谁.在这种情况下,由于listOfFiles依赖于User实例的状态,因此它不应该是静态的,并且您的调用看起来更像

 User u = new User(..., ..., ...);
 u.showTheList(); 

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有