Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么java中会出现死代码警告?_Java_Dead Code - Fatal编程技术网

为什么java中会出现死代码警告?

为什么java中会出现死代码警告?,java,dead-code,Java,Dead Code,我在eclipse中从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(" =

我在eclipse中从
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

您正在使用
if(line.contains(“=”)
行上操作。如果
line
null
,则会抛出
NullPointerException
,您无法捕获该异常。因此,
中断语句。如果到达
If(line==null)
语句,则它不是
null
。逻辑上,
break将永远不会执行,因此无法访问。Eclipse似乎正在检测到这一点。注意,这仍然可以用javac编译;这只是Eclipse的警告

此外,如果<代码>中断
是不可访问的,那么就没有办法在while(true)
时结束
,因此超出
while
块的任何内容都是不可访问的。所以Eclipse也会就此发出警告

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

String line;
while ( (line = r.readLine() ) != null)
{
    // rest of processing here
}
这并不是最干净的代码,它的赋值表达式与相等性检查相同,但这是执行这种读取和检查操作的常用方法

这样,
while
语句就可以正常结束,以后就不需要检查
null
。这也使得
之后的任何代码都可以访问,而
块则可以访问。

Put

if(line == null) 
{
    break;
}

if(line.contains(" = "))

它是死代码的原因是因为if-else语句都会导致异常,使其后的任何代码都成为死代码。

因为如果
line
为null,则在
line.contains(“=”)
)处会出现异常。好吧,如果
line
null
,那么
if(line.contains(“=”)
将导致一个
NullPointerException
-开始。尽量避免
(true)
中断
,这很混乱,从循环中有一个实际的退出条件,你可以很容易地进行推理。此外,您可能希望了解一种更好的资源管理方法。因此,如果
行.contains(“=”
为false,则抛出一个异常,因此一整串代码永远不会运行,而不是答案,但是
新异常…
行应以
throw
开头。此时,代码创建了一个异常,但对其不做任何处理。@AlexTaylor,实际上,该行末尾有一个
printStackTrace()
。然而,这是一种令人憎恶的行为。它忽略了抛出和捕获异常的意义。如果OP想要打印错误消息,他们应该只打印一条错误消息。更好的是:他可以在while本身上进行检查,比如
while((line=r.readLine())!=null)