Eclipse IDE问题部分中死代码的含义是什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eclipse IDE问题部分中死代码的含义是什么相关的知识,希望对你有一定的参考价值。
我正在使用Eclipse Helios IDE进行Web应用程序开发。在Eclipse的Problems部分下,对于某些行,描述显示为“Dead Code”。
请问有谁请告诉我Dead Code究竟是什么意思?
请参阅屏幕截图供您参考。
例如,这部分在Eclipse下显示为死代码
else {
int length;
if (ar != null)
length = Array.getLength(ar);
else
length = 0; // This line is dead code
在Eclipse中,“死代码”是永远不会执行的代码。通常它位于条件分支中,逻辑上永远不会输入。
一个简单的例子如下:
boolean x = true;
if (x) {
// do something
} else {
// this is dead code!
}
这不是一个错误,因为它仍然是有效的java,但它是一个有用的警告,特别是如果逻辑条件很复杂,并且可能不直观地显示代码永远不会被执行。
在您的具体示例中,Eclipse计算出ar
将始终为非null,因此将永远不会执行else length = 0
分支。
是的,Eclipse有可能是错的,但更不可能的是它。
死代码的简单示例
public class IfTest {
public static void main(String[] args) {
if (true) {
if(false) {
System.out.println("a"); //Dead code, Never be Execute this if block.
}else {
System.out.println("b");
}
}
}
试试这个:
while (true) {
if(false == true) break;
}
S.O.P("I will never reach here!") <-- This code will never be executed.
代码是有效的,因为它符合编译器,但实际上循环永远不会退出,实际上S.O.P永远不会被执行。
死代码是永远不会执行的代码,例如
boolean b = true
if (!b) {
....
// dead code here
}
死代码意味着无法执行此代码。
有时你甚至无法编译它(像这种情况:)
private Boolean dead_code()
{
return true;
//Dead code below:
dosomething();
}
但在其他情况下,这并不太明显,例如:
b=true;
[...]
if (b==false)
{
//Dead code
}
如果您有此消息,则代码中存在一些主要缺陷。你必须找到它,否则你的应用程序将无法正常工作。
Eclipse提供了两种诊断方法,用于标记将在运行时执行/不执行的代码。 1)无法访问的代码:这些是遵循JLS的不可达规则的常见java警告,也是由javac提供的。这些都是编译错误。例子:
int foo() {
return 1;
int i = 1; // Unreachable
}
int foo2() {
while (true);
int i =1; //Unreachable
}
还有其他更复杂的例子:)
2)死代码:这是Eclipse自己的静态分析警告,并且大部分都与null分析有关,即
void foo() {
Object o = null;
if (o == null) {
} else {
// dead code
}
上面给出的例子不应该给出死代码警告。即
boolean x = true;
if (x) {
// do something
} else {
// this is dead code!
}
不应该发出警告,因为JLS禁止编译器评估变量的“值”。我们所能评估的只是'无效'
希望这可以帮助
您可能在“死代码”行上方的行中有一个Null指针异常。确保检查“空指针”异常。
您之前可能使用过变量ar
。然后编译器知道else语句中的行永远不会被执行。要么在你使用NullPointerException
的地方有ar
,要么执行if
声明的第一部分。
让我给死代码一些答案。
例如:
public class UnreachableTest{
public static void main(){
try{
// some code
}
catch(Exception exc){
throw new NullPointerException();
System.out.println("Unreachable line"); // compile time error
}
}
}
这里是System.out.println(“无法访问的行”);从未被执行过。反过来又认为是死代码。
另一个例子可能是:
int func(int i, int j)
{
int sum = i + j;
return i + j; // never actually using the sum
}
简单的函数返回i + j;从来没有真正使用总和Sum在这里被认为是死代码。
发生这种情况的其他一些情况。
System.out.println("result :" + result + ":" + result.isEmpty());
if (result == null)
return result;
else if(!result.isEmpty())
str.append(result + " ");
1)在这里,当你打印结果并检查isEmpty()时,eclipse假定结果不为null,所以它不会进入if。所以返回结果是死代码。
2)现在让我们说结果是null,所以你会在result.isEmpty()中得到NullPointerException所以再次它将不会进入if并返回结果是死码
要使这项工作只注释掉System.out.println()。
如果您给出的条件检查可能永远不会满足,则Eclipse会发出此警告。以下是一些例子
Object o=null;
if(o!=null) {
//Some code
}
这里将出现死代码警告,因为对象已经为空
另一个例子如下
BSTTest bstTest=null;
bstTest.test=10;
if(bstTest==null) {
//some code
}
这里的代码试图访问类的变量。由于变量已经被访问,eclipse将在if(bstTest == null)中给出死代码警告,因为当已经访问变量时,bstTest可能不为null。
注意:这里bstTest.test将给出空指针异常
以上是关于Eclipse IDE问题部分中死代码的含义是什么的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cygwin(Linux 模拟器)中使用 Eclipse(IDE)?