为什么我在 java 中收到无效代码警告?
Why am I getting dead code warning here in java?
我在 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
上进行手术。如果 line
是 null
,则会抛出一个 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 语句都可能导致异常,使之后的任何代码成为死代码。
我在 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
上进行手术。如果 line
是 null
,则会抛出一个 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 语句都可能导致异常,使之后的任何代码成为死代码。