【发布时间】:2014-07-30 16:58:55
【问题描述】:
我的 java 程序在命令行上接受用户的输入。用户可以选择:他可以使用 -inputfile 选项指定纯文本文件作为输入,也可以不指定此选项,在这种情况下,程序从 System.in 获取输入。 (我在我的 Ubuntu 发行版预装的一些程序中观察到了这种行为,因此我推断这是可以接受的做法。)
所以我创建了一个从文件中读取的BufferedReader (inBR),如果提供的话,以及一个从System.in 读取的Scanner (inScanner)。这些对象中只有一个被实际实例化,另一个保留为空。稍后,当程序从输入中读取一行时,我有以下代码:
String line;
if (inBR != null) {
line = inBR.readLine(); (1)
} else {
line = inScanner.nextLine(); (2)
}
这给了我编译时错误 variable inBR might not have been initialized 和 variable inScanner might not have been initialized 在第 (1) 和 (2) 行,分别。
这里可以接受的解决方案是什么?我考虑过,“将应该为 null 的变量初始化为 Object 以关闭编译器。”但这只是一个技巧。肯定有更好的方法。
另外,为什么这不是运行时异常,例如 NullPointerException?
编辑:inScanner.readLine() => inScanner.nextLine()
【问题讨论】:
-
我认为您需要向我们展示更多代码,例如您初始化 inBR 和 inScanner 的位置
-
声明它们时将它们初始化为 null。
-
这不是运行时异常,因为它不是在运行时发生的;它发生在编译时。
标签: java