Java:Savitch的书籍例子中的空指针异常?

时间:2013-03-25 20:17:36

标签: java

是的,我已经阅读了Stackoverflow关于NPE的优秀解释,我已经理解了它们的含义。然而,我发现(我想我发现)关于这个NPE的问题在该教科书的一个样本练习中,事实上,我很久以前就在哈佛大学使用过。

它是关于引用变量String line = null;正如解释所说,没有任何对象被创建,而后来尝试使用它(所以我认为),更确切地说,当line = inputStream.nextLine();时,尝试加入对象。这是代码,问题是如何解决这个问题。我试过实例化一个对象,但是......没有用。

package test;

import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.FileOutputStream;

public class Test
{
    public static void main(String[] args) {
        Scanner inputStream = null;
        PrintWriter outputStream = null;
        try {
            inputStream = new Scanner(new FileInputStream("original.txt"));
            outputStream = new PrintWriter(
            new FileOutputStream("numbered.txt"));
        } catch (FileNotFoundException e) {
            System.out.println("Problem opening files.");
            System.exit(0);
        }
        String line = null;
        int count = 0;
        while (inputStream.hasNextLine()) {
            line = inputStream.nextLine();
            count++;
            outputStream.println(count + " " + line.toString());
        }
        inputStream.close();
        outputStream.close();
    }
}

是的,我试图运行它。我在Netbeans 7.3上新创建的项目中复制并粘贴了代码

2 个答案:

答案 0 :(得分:4)

line = inputStream.nextLine( );不会尝试访问任何对象line:它会为变量line指定一个值。因此,它不需要行null

答案 1 :(得分:4)

line = inputStream.nextLine( )

line指定一个值。它不会尝试读取line的当前值,特别是通过尝试在其上调用方法,所以我没有看到NPE在这里发生。此时line null是正常的,因为它的值会被赋值覆盖。

您应该尝试通过实际运行此代码来证明您的怀疑!