4

我不明白为什么 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) 中都没有找到匹配项,它应该抛出异常。
但是怎么了?

4

3 回答 3

14

如果 line 为 null,line.matches("@\\d*")则会抛出 NullPointerException

于 2013-03-05T18:53:01.520 回答
2

它已经死了,因为您之前在第 4 行中取消引用了指针“line”,这保证它不是 NULL,否则您会得到 NullPointerException。

于 2013-03-05T18:54:20.197 回答
1

第一的:

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");

而且您没有在每一行都进行此检查...

此代码不应返回任何死代码...

于 2013-03-05T18:58:34.950 回答