Learn to identify dead code and unreachable code in Java. Java面接のコーディング問題で、パズルとして出題されるかもしれません。
デッドコードと到達不能コードのエラー
デッドコードの概念を作るために、このパズルでは、以下にコードの一部を与えています。
上のパズルの答えは次のセクションで述べますが、まず自分でやってみることをお勧めします。
Solution – It has dead code
私たちは皆、「Unreachable code」に関するコンパイルエラーに直面したことがあるはずですし、「デッドコードの警告」に気付いた人もいるかもしれません。
最初のメソッドhowToDoInJava_method1()
では、2番目のprint文が到達不可能で、コンパイラは気づかないうちに文句を言っています。
3番目のメソッドhowToDoInJava_method3()
でも、2番目のprint文が到達できないので、コンパイラはまた文句を言います。
なぜだ!
デッドコードとは
メソッド 2 の到達できないコードを「デッドコード」と呼びます。 これは純粋にEclipseコンパイラが報告したエラーであり、もしあなたが上記のクラスを “javac “でコンパイルする場合、Java内蔵コンパイラは他の2つのメソッドに対してのみ文句を言います。 .
Java言語仕様からの引用 –
“このアイデアは、ステートメントを含むコンストラクタ、メソッド、インスタンス初期化または静的初期化子の先頭からステートメント自体まで、何らかの可能な実行パスが存在しなければならないということである. この分析では、ステートメントの構造を考慮します。
Except the special treatment of
while
,do
, andfor
statements whose condition expression has the constant value true, the other expression are not taken account in the flow analysis”.
What is that that, is 'if'
block is not taken account while determining unreachable code.これはつまり、到達不可能なコードの判定において、'if'
ブロックは考慮に入れられないことを意味します。 なぜなら、もしあなたが'if'
文のパスの1つを通れば、2番目のprint文に到達する可能性があるからです。
他の2つのメソッドでも、コンパイラは到達不可能と判断し、エラーにします。
ここで、コンパイラは最後のprint文に到達できないと判断し、'javac'
は再びこの2番目のメソッドのコードも到達不可能であると報告します。