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)?

Eclipse IDE 未显示正确的输出

精通Eclipse V3.4,第1部分: Eclipse工作台

IDE介绍以及Eclipse的简单使用

C语言中死循环怎么解决?

Eclipse调试多线程代码