2012-01-03 20 views
17

Webアプリケーションの開発にEclipse Helios IDEを使用しています。 Eclipseの「問題」セクションで、いくつかの行について説明が「デッドコード」として表示されます。Eclipse IDEでデッドコードが意味するもの問題セクション

デッドコードが実際に意味することは誰でも教えてください。

参照用にスクリーンショットをご覧ください。

enter image description here

は、例えばこの部分は、EclipseでのEclipse

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

おそらく、nullポインタ例外を与えるだろう - 多くのコードなしで、我々は確かに言うことはできません(ただし、それ以外の場合はなるだろうバグがあり、Eclipseのコンパイラよりもコード内のバグを探す傾向があります;)) – Voo

+0

Eclipseには時には間違いがあります。私は、Eclipse Neonが死んでいるとは言えないコードの "dead code"エラーを見てきました。 –

答えて

35

下デッドコードとして示されている、「デッドコード」が実行されることはありませんコードです。通常は論理的には決して入力されない条件分岐にあります。それがまだ有効なJavaのため、

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

それは誤りではないのですが、論理的な条件が複雑な場合は特に、有益な警告だし、それはどこではないかもしれない:

簡単な例は次のようになります直感的に明らかなコード実行されます。

具体的な例では、arは常にnullではないと計算されているため、else length = 0ブランチは決して実行されません。

はい、可能です Eclipseは間違っていますが、それはそうではない可能性が高いです。

+0

私は私の質問を変更しました。私の質問は、どうすればEclipseがこれをデッドコードと判断できるのか教えてください。私の意見ではEclipseの提案も間違っているかもしれないので知っている?? – Pawan

+0

@skaffman、デッドコードが削除されてバイトコードに表示されないのですか? – Pacerier

+0

それは私を救った.... –

5

デッドコードは決して実行されないコードです。

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 
    } 

あなたがこれを持っている場合メッセージは、あなたのコードのいくつかの大きな欠陥です。あなたはそれを見つけなければなりません。さもなければあなたのアプリは意図したとおりに動かないでしょう。

+0

私はあなたの最初の例が好きですが、 "そこには**いくつかの大きな欠陥があります"とは反対です。これは必ずしもそうである必要はありません。たとえば、静的なブール値の「デバッグ」パラメータを使用して、パラメータがtrueに設定されている場合にのみコードを実行します。リリースでは、パラメータをfalseに変更し、結果として、「デバッグ」コード部分が決して実行されないため、多くのデッドコード警告が発生します。 – THelper

+0

あなたは正しいです、私はこの事件については考えていませんでした。実際には、多くのデッドコードが発生します。 – Force

1

実行時に実行されるコードと実行されないコードをマークするためにEclipseが提供する2種類の診断があります。 1)到達不能コード:JLSの到達不能ルールに従う通常のJava警告であり、javacによっても与えられます。これらはコンパイルエラーを意味します。例:

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

他のより複雑な例:)

2)デッドコードがあります。これは、Eclipseの独自の静的解析の警告であり、主にヌル分析、すなわち外に結びついています

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

上記の例では、デッドコード警告が表示されません。すなわち

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

は、コンパイラが変数の '値'を評価することを禁止するため、警告を出すべきではありません。我々は評価できるすべては「nullであるかどうか」これはあなたが「デッドコード」行以上の行でnullポインタ例外を持つかもしれない

1

を助け

希望です。 "Null Pointer"例外がないかどうかを確認してください。それはしかし、現実にはループが終了することはありませんし、実際にS.O.Pが実行されることはありません、コンパイラに準拠してコードが有効である

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

} 

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

+0

私はまた言っています:あなたは、コンパイラがNullポインタ例外:)を持っている可能性があります。つまり、コンパイラでさえ理解できるように警告を出した行でNullポインタ例外が発生することがあります。 – XMight

-1

はこれを試してみてください。

0

以前は変数arを使用している可能性があります。次に、コンパイラは、else文の行が決して実行されないことを認識します。 arを使用した場所にNullPointerExceptionがあるか、またはifステートメントの最初の部分が実行されます。

0

私はデッドコードに対していくつかの答えを教えてください。

例:ここ

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( "到達不能ライン");決して実行されません。 これはデッドコードとみなされます。

別の例は、であってもよい:iがjで+

int func(int i, int j) 
{ 
int sum = i + j; 
return i + j; // never actually using the sum 
} 

簡単な関数が返します。決して実際には合計を使用しません。 合計はここでデッドコードとみなされます。

0

この場合、その他の場合があります。ここで

System.out.println("result :" + result + ":" + result.isEmpty()); 
if (result == null) 
    return result; 
else if(!result.isEmpty()) 
    str.append(result + " "); 

1)あなたは、その結果を印刷してのisEmpty()日食をチェックしているようならば、それはで行くことはありませんので、結果がnullでないことを前提としています。したがって、戻り値はデッドコードです。

2)さて、結果はそうあなたはそれがあればで行くと、結果を返しませんので、もう一度()result.isEmptyでNullPointerExceptionが取得するnullを来ているとしましょうが、この作品は単なるシステムをコメントアウトようにするにdeadcode

です。 out.println()。

0

Eclipseは、あなたが与えている状態チェックが決して満たされない場合、この警告を出します。以下のいくつかの例

Object o=null; 
if(o!=null) { 
//Some code 

} 

です。ここデッドコードの警告がObjectとして来ることは、すでに別の例は、コードは、の変数にアクセスしようとしている。ここ

BSTTest bstTest=null; 
bstTest.test=10; 
if(bstTest==null) { 
    //some code 

} 

以下の通りである

ヌル行われますクラス。変数がすでにアクセスされているので、変数がすでにアクセスされているときにbstTestがnullでない可能性があるため、eclipseはif(bstTest == null)のデッドコード警告を出します。

注:それはar`がnullになることはありません `ことを証明することができますので、ここでbstTest.testは

関連する問題