0

我正在尝试在我的主函数类中遍历一组 Student 对象,但出现以下错误

Exception in thread "main" java.lang.NullPointerException
    at input_output.printOutClass(input_output.java:36)
    at input_output.main(input_output.java:11)

我的 input_output 文件中的第 36 行看起来像

 34  for(int i = 0; i < students.length; i++){
 35    System.out.println("---------------------------------------");
 36    students[i].getFullPrint();
 37    System.out.println("");
 38  }

经过一些调试后,我很确定一旦代码在迭代中运行第 36 行,其中学生 [i] 没有调用它的构造函数。但是,我是 java 新手,不知道如何检查变量的内存地址以查看它是否存在。我该怎么做呢?

先谢谢了。

4

4 回答 4

2

这意味着 students[i] 返回 null。

尝试这个。

             for(int i = 0; i < students.length; i++){
                     System.out.println("---------------------------------------");
                     System.out.println( i + (students[i] == null));
                     if(students[i] != null){
                         students[i].getFullPrint();
                     }
                     System.out.println("");
             }

IDE 允许调试在其中设置一个断点,它将为您提供内存和变量状态。

于 2013-06-07T00:53:31.013 回答
1

在 Java 中,指针称为引用。您可以避免引用尚未创建的对象,如下所示:

if (students[i] != null) {
    students[i].getFullPrint();
}

或者,您可以确保students[]已创建数组内的所有对象。请注意,在 Java 中,当您创建数组时,您只创建用于保存对对象的引用的结构;您不会自己创建对象 - 它们需要通过调用其构造函数并分配各个数组元素来单独创建。

于 2013-06-07T00:53:43.410 回答
0

检查引用是否等于null

if(students[i] != null) // blah blah
于 2013-06-07T00:53:10.637 回答
0

好像你还没有初始化你的students[]数组。

我的猜测是您在代码中的某处使用了以下行来声明学生 [] 数组。

StudentClass students[] = new StudentClass[some_int];

但是你不会像下面的代码那样初始化它。

for(int i = 0; i < students.length; i++){
            students[i] = new StudentClass();
        }

这是一个非常常见的错误。因此,请确保您已正确初始化您的引用。

于 2013-06-07T04:55:38.303 回答