Подтвердить что ты не робот

Что означает Dead Code в разделе "Проблемы с Eclipse IDE"

Я использую Eclipse Helios IDE для разработки нашего веб-приложения. В разделе "Проблемы" в Eclipse для некоторых строк описание отображается как "Мертвый код".

Может ли кто-нибудь сказать мне, что на самом деле означает Dead Code?

Пожалуйста, просмотрите снимок экрана для справки.

enter image description here

Например, эта часть отображается как мертвый код в Eclipse

 else {
        int length;
        if (ar != null)
            length = Array.getLength(ar);
        else
            length = 0; // This line is dead code
4b9b3361

Ответ 1

В Eclipse "мертвый код" - это код, который никогда не будет выполнен. Обычно это в условной ветки, которая логически никогда не будет введена.

Тривиальным примером может быть следующее:

boolean x = true;
if (x) {
   // do something
} else {
   // this is dead code!
}

Это не ошибка, поскольку она по-прежнему действительна java, но это полезное предупреждение, особенно если логические условия сложны и где не может быть интуитивно очевидно, что код никогда не будет выполнен.

В вашем конкретном примере Eclipse вычислил, что ar всегда будет не нулевым, и поэтому ветвь else length = 0 никогда не будет выполнена.

И да, возможно, что Eclipse ошибочен, но гораздо более вероятно, что это не так.

Ответ 2

Мертвый код - это код, который никогда не будет выполнен, например

 boolean b = true
 if (!b) {
    .... 
    // dead code here
 }

Ответ 3

Мертвый код означает, что этот способ не будет выполнен.

Иногда вы даже не можете его скомпилировать (например, этот случай:)

private Boolean dead_code()
    {
    return true;
    //Dead code below:
    dosomething();
    }

Но в других случаях это не слишком очевидно, например, это утверждение:

   b=true;
   [...]
   if (b==false)
    {
    //Dead code
    }

Если у вас есть это сообщение, там есть некоторый главный недостаток вашего кода. Вы должны найти его, иначе ваше приложение не будет работать по назначению.

Ответ 4

Существует два вида диагностики, которые Eclipse предоставляет для маркировки кода, который будет/не может быть выполнен во время выполнения. 1) Недостижимый код: это обычные предупреждения Java, которые следуют правилам недостижимости JLS, а также даны javac. Они предназначены для компиляции ошибок. Примеры:

   int foo() {
      return 1;
      int i = 1; // Unreachable
   }
   int foo2() {
     while (true);
     int i =1; //Unreachable
   }

Существуют и другие более сложные примеры:)

2) Dead code: это собственные предупреждения о статическом анализе Eclipse и в основном связаны с нулевым анализом.

   void foo() {
     Object o = null;
     if (o == null) {
     } else {
     // dead code
     }

Приведенные выше примеры НЕ должны давать предупреждение о мертвом коде. т.е.

boolean x = true;
if (x) {
   // do something
} else {
   // this is dead code!
}

не следует предупреждать, потому что JLS запрещает компилятору оценивать "значение" переменных. Все, что мы можем оценить, это "nullness"

Надеюсь, что это поможет

Ответ 5

У вас может быть исключение Null pointer в строках выше строк "Dead Code". Убедитесь, что вы проверяете исключение "Null Pointer".

Ответ 6

Возможно, вы использовали переменную ar раньше. Тогда компилятор знает, что строка в инструкции else никогда не будет выполнена. Либо будет NullPointerException в том месте, где вы использовали ar, или будет выполняться первая часть инструкции if.

Ответ 7

позвольте мне дать ответ для мертвого кода.

Например:

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 
}

простая функция возвращает я + j; никогда не использует сумму. Сумма считается мертвым кодом здесь.

Ответ 8

В другом случае, когда это происходит.

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) Теперь давайте скажем, что результат близок к нулю, поэтому вы получите NullPointerException в result.isEmpty(), так что он снова не войдет, если и результат возврата - это deadcode

Чтобы сделать эту работу, просто закомментируйте System.out.println().

Ответ 9

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 может не быть нулевым, когда к переменной уже получен доступ.

Примечание: здесь bstTest.test выдаст исключение нулевого указателя

Ответ 10

Простой пример мертвого кода

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");
            }
        }
    }

Ответ 11

Чтобы упростить термин "Недоступный код" и "мертвый код":

Недоступный код - это блок кода/оператор в Java, до которого элемент управления никогда не доходит и никогда не выполняется в течение всей жизни программы. Ниже приведен пример недоступного кода. Это приводит к ошибке времени компиляции.

public void unreachableCodeExample() {
     System.out.println("This will execute");
     return;
     System.out.println("This will not"); //This is Unreachable code
 }

Хотя "мертвый" код является недостижимым кодом, но он не генерирует ошибку времени компиляции. Но если вы выполните его в Eclipse (или в другой IDE), вы получите предупреждение. Пример ниже,

public void deadCodeExample() {
        if (true) {
            System.out.println("This will execute");
            return;
        }
        System.out.println("This will not"); //This is dead code
    }

Ответ 12

Попробуйте следующее:

while (true) {
    if(false == true) break;

}

S.O.P("I will never reach here!") <-- This code will never be executed.

Код действителен, так как он соответствует компилятору, однако на самом деле цикл никогда не выйдет, и в действительности S.O.P никогда не будет выполнен.