【问题标题】:Java Nullpoint Exception [duplicate]Java空点异常[重复]
【发布时间】:2014-02-02 04:21:11
【问题描述】:

我正在尝试使用以下代码读取文件并将行条目存储到对象中:

package eclipsePackage;
import java.io.*;
import java.util.*;
public class MainProg {

    public static void main(String[] args) throws IOException{

        Scanner file=null;
                try{ 
                    file=new Scanner(new File("notes.txt"));
                }catch(Exception e){
                    System.out.println("unable to open the file");
                }
                    Ages arr[]=new Ages[5];
                    for(int i=0; i<5;i++){
                            arr[i].readData(file);
                    }
                    file.close();
                    System.out.println("Name"+"\t"+"Age"+"\t"+"Year of Birth");
                    for(int i=0;i<5;i++){
                        arr[i].outputData();
                    }
                }
            }

读取文件的方法在一个名为 Ages 的类中。
但我得到了错误:线程“主”java.lang.NullPointerException中的异常 在 eclipsePackage.MainProg.main(MainProg.java:16) 有人可以帮我解决吗

【问题讨论】:

  • 在要求它读取数据之前,您尚未创建 Ages 对象。修复它。 (创建数组只会给你一个地方来存储对对象的引用并用空值填充它;你还需要 new 对象本身。)

标签: java


【解决方案1】:

在下面的代码中,您分配了一个数组,而不是该数组的各个元素对象。然后,当您尝试访问 arr[i] 时,元素为空。

 Ages arr[]=new Ages[5];
    for(int i=0; i<5;i++){
             arr[i].readData(file); // ERROR here.
     }

改为:

 Ages arr[]=new Ages[5];
    for(int i=0; i<5;i++){
             arr[i] = new Ages(); //or whatever your constructor should be.
             arr[i].readData(file); 
     }

这是一个常见的新手错误。在此处阅读Arrays

【讨论】:

    【解决方案2】:

    当你像这样初始化你的数组时:

    Ages arr[]=new Ages[5];
    

    它创建了一个由五个元素组成的数组,但每个元素都有一个null 值。您需要先填充每个插槽,然后再使用它。所以可能是这样的(取决于Ages 类的声明方式):

    for(int i=0; i<5;i++){
        arr[i] = new Ages();
        arr[i].readData(file);
    }
    

    【讨论】:

    • 非常感谢,这更有意义
    【解决方案3】:

    查看您的代码:

         Ages arr[]=new Ages[5];
    

    它告诉编译器你将使用一个名为arr 的数组。它拥有Ages 类的对象。然后通过new Ages[5] 初始化数组。这意味着 5 个Ages 对象的内存是相邻分配的。 但 5 个对象仍未初始化。数组中的 5 个元素中的每一个都具有空值。 致电arr[i].readData(file); 您正在为null pointer Exception 创建空间。

    你应该添加

    for(int i=0;i<5;i++)
    {
        arr[i]=new Ages()//or call any constructor inside Ages
        arr[i].readData(file)//No exception here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2018-04-23
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      相关资源
      最近更新 更多