是的,我已经阅读了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上新创建的项目中复制并粘贴了代码
答案 0 :(得分:4)
line = inputStream.nextLine( );
不会尝试访问任何对象line
:它会为变量line
指定一个值。因此,它不需要行null
。
答案 1 :(得分:4)
line = inputStream.nextLine( )
为line
指定一个值。它不会尝试读取line
的当前值,特别是通过尝试在其上调用方法,所以我没有看到NPE在这里发生。此时line
null
是正常的,因为它的值会被赋值覆盖。
您应该尝试通过实际运行此代码来证明您的怀疑!