Java空指针异常

时间:2014-02-02 04:21:12

标签: java

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

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的类中 但我得到错误:线程“main”java.lang.NullPointerException中的异常     在eclipsePackage.MainProg.main(MainProg.java:16) 有人可以帮我解决吗?

3 个答案:

答案 0 :(得分:0)

按照以下方式初始化数组时:

Ages arr[]=new Ages[5];

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

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

答案 1 :(得分:0)

在以下代码中,您将分配一个数组,但不会分配该数组的各个元素对象。然后,当您尝试访问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 :(得分:0)

查看您的代码:

     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
}