Что означает 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
Ответы
Ответ 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 никогда не будет выполнен.