繁体   English   中英

为什么我在Java中收到死代码警告?

[英]Why am I getting dead code warning here in java?

我从if(line == null)语句到r.close()语句的日食中收到死代码警告。

BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

int counter = 0;

while(true)
{
    String line = r.readLine();
    counter++;

    if(line.contains(" = "))
    {
        String[] keyVal = new String[2];

        keyVal[0] = line.substring(0, line.indexOf(" = ") - 1);
        keyVal[1] = line.substring(line.indexOf(" = ") + 3);

        buffer.add(keyVal);
    }
    else
    {
        new Exception("Invalid expression at line " + counter + " in file " + file.getPath()).printStackTrace();
    }

    if(line == null) // dead code here
    {
        break;
    }
}

System.out.println("here is a dead code");

r.close(); // another dead code

您所操作lineif(line.contains(" = ")) 如果linenull ,则将抛出NullPointerException ,您没有捕获到。 因此, break; 声明无法达到。 如果到达if(line == null)语句,则它不是null 逻辑上, break; 将永远不会被执行,所以它是无法到达的。 看来Eclipse正在检测到这一点。 注意,仍然可以使用javac进行编译。 这只是Eclipse的警告。

此外,如果break; 是不可达的,那么就没有办法结束while(true) ,所以while块之外的任何东西都是不可达的。 因此,Eclipse也对此发出警告。

逐行读取文件,检查该line是否为null以指示流结束的通常方法是

String line;
while ( (line = r.readLine() ) != null)
{
    // rest of processing here
}

它不是最干净的代码,在赋值中的赋值与相等性检查相同,但这是执行这种读取和检查操作的常用方法。

这样, while语句可以正常结束,因此以后无需检查null 这也使得在while块之后的任何代码都可以访问。

if(line == null) 
{
    break;
}

之前

if(line.contains(" = "))

之所以说它是无效代码,是因为两个if else语句都可能导致异常,从而使该代码之后的任何代码成为无效代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM