java – 空指针异常,“尝试从空对象引用上的字段读取”

前端之家收集整理的这篇文章主要介绍了java – 空指针异常,“尝试从空对象引用上的字段读取”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在创建一个应用程序,用户在其中键入任务列表,并将该列表保存到数组中.数组中的每个任务都是Assignment类的一个实例.但是,我意识到在java中,在创建数组之后无法向数组添加元素.所以,我做的是创建了一个名为tasks的数组,其中包含许多空值:Assignment [] tasks = {null,null,null}; .当我想向数组添加任务时,我只需用对象替换下一个空值.但是,我还需要一个只有任务的数组,没有空值.所以我为所有非空元素创建了一个名为full_tasks的数组:

for (Assignment task: tasks) {
    if (task != null) {
        realLength += 1;
    }
}

Assignment[] full_tasks = new Assignment[realLength];

for (int i=0; i <= full_tasks.length - 1; i++) {
        full_tasks[i] = new Assignment(tasks[i].name,tasks[i].days_due,tasks[i].time);
}

所以现在,full_tasks数组应该是所有任务的数组,其中没有一个是null,对吧?但是,当我运行应用程序时,它无法启动活动,它说的错误是由空指针异常引起的:

 Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.lb.homeworkappv11.Assignment.name' on a null object reference
        at com.example.lb.homeworkappv11.Schedule.sortTasks(Schedule.java:64)

错误指向的行是:

full_tasks[i] = new Assignment(tasks[i].name,tasks[i].time);

我仍然不完全确定null对象引用是什么,但我认为这意味着full_tasks数组中的一个元素为null.这是对的吗?如果是,我该怎么做才能确保full_tasks数组只是tasks数组中的非null元素?

非常感谢!

编辑:赋值类的构造函数是:

public Assignment(String name,int days,int time) {
    this.name = name;
    this.days_due = days;
    this.time = time;
    this.toSortBy = "nothing";
}
最佳答案
空引用就是null.在你的代码中,是tasks [i] .name,你尝试在任务[i]上调用name,所以tasks [i]为null.

我可以想到一个场景,你的代码肯定会抛出NullPointerException.
所以,我假设你的任务数组看起来像这样:

tasks = [task0,task2,task3,task5]

然后full_tasks的大小为4但是

for (int i=0; i <= full_tasks.length - 1; i++) {
        full_tasks[i] = new Assignment(tasks[i].name,tasks[i].time);
}

因为任务[1]为空,我会在i == 1时抛出一个NPE.

因此,如果要仅使用非空任务填充full_tasks,请确保获得正确的任务索引.

猜你在找的Java相关文章