while循环中的死代码警告,如果是2

时间:2013-03-05 18:51:24

标签: java dead-code

我无法理解为什么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)它应该抛出异常。
但是怎么了?

3 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:2)

它已经死了,因为你之前取消引用第4行中的指针'line',它保证它是NOT NULL,否则你会得到NullPointerException。

答案 2 :(得分: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");

你并没有在每一行都做这个检查......

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