2017-09-10 24 views
4

以下は私のコードです。私が2番目のステートメントにコメントしているときに罰金を守っていますが、コメントを外すとコンパイルエラーが発生します"Unreachable Code"例外処理到達不能コード

コメントを外した後にエラーが発生する理由を理解していますが、私がまだbad()にアクセスできない場合でも、私はthrowingだと例外がキャッチされています。

class Varr 
{ 
    public static void main(String[] args) throws Exception 
    { 
    System.out.println("Main"); 
    try { 
     good(); 
    } catch (Exception e) { 
     System.out.println("Main catch"); 
     //**Statement 1**  
     throw new RuntimeException("RE"); 
    } finally { 
     System.out.println("Main Finally"); 
     // **Statement 2**  
     throw new RuntimeException("RE2"); 
    } 
    bad(); 
    } 
} 
+0

( '悪い)'あなたはコメントを出した場合、 'ステートメント、到達不可能ではありません2 '。私はあなたが「ついに」という誤解をしていると思います。そして一つの発言:「最終的に」ブロックに何かを戻したり投げたりしてはいけません。これは明確に定義されていますが、理解しづらい動作につながります。あなたの例では、 'finally'は常に実行され、すべてを打つので、常に' 'RE2'' -Exceptionを投げます。 – Turing85

答えて

3

が、私はまだそれをコメントする場合でも、私は例外をスローしていて、私の質問が悪い()は 到達不能です、それはそれのためにエラーを与えて ない理由その後、キャッチですか?

catchステートメントには実行が必要ないため、実行する必要はありません。
あなたがcatchに入力していないため、bad()は、その後に実行されるようにgood()は、任意の例外をスローしないこととします

public static void main(String[] args) throws Exception 
{ 
    System.out.println("Main"); 
    try { 
     good(); // doesn't throw an exception 
    } catch (Exception e) { 
     System.out.println("Main catch"); 
     throw new RuntimeException("RE"); 
    } 
    bad(); // execution goes from good() to here 
} 
+0

答えをありがとう、私はそれを理解した。 また、catchブロックが確実に実行されるようにtryブロックに例外をスローした場合、catchブロックをそのままにしてfinallyブロックを削除してからbad()も到達不能になります –

関連する問題