我不明白为什么Eclipse对第二个if条件中的代码给出了死代码警告:
boolean frameErreicht = false;
while (!frameErreicht) {
String line = reader.readLine();
if (line.matches("@\d*")) {
reader.mark(reader.getLineNumber() - 1);
reader.setLineNumber(reader.getLineNumber() - 1);
frameErreicht = true;
}
if (line == null)
throw new IOException("Keine Angaben zu Frames im Eingabestrom");
}
LinenumberReader的readLine()方法的jdoc说,如果到达流的结尾,它将返回null
,所以如果在整个文本中没有找到匹配(line == null
),它应该抛出异常。
但怎么了?
如果line为null, line.matches("@\d*")
将抛出NullPointerException
它已经死了,因为你之前在第4行取消了指针'line'的引用,这保证了它不是NULL,否则你会得到NullPointerException
First:
boolean found = false;
String line = null;
while ((line=reader.readLine())!=null) {
if (line.matches("@\d*")) {
reader.mark(reader.getLineNumber() - 1);
reader.setLineNumber(reader.getLineNumber() - 1);
found=true;
break;
}
}
if(!found) throw new IOException("Keine Angaben zu Frames im Eingabestrom");
你不是每一行都做这个检查…