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