2016-04-11 13 views
-1
public class Main { 

    public static void main(String[] args) { 
     System.out.println("Normal: " + testNormal()); 
     System.out.println("Exception: " + testException()); 
    } 

    public static int testNormal() { 
     try { 
      // no exception 
      return 0; 
     } catch (Exception e) { 
      System.out.println("[normal] Exception caught"); 
     } finally { 
      System.out.println("[normal] Finally"); 
     } 
     System.out.println("[normal] Rest of code"); 
     return -1; 
    } 

    public static int testException() { 
     try { 
      throw new Exception(); 
     } catch (Exception e) { 
      System.out.println("[except] Exception caught"); 
     } finally { 
      System.out.println("[except] Finally"); 
     } 
     System.out.println("[except] Rest of code"); 
     return -1; 
    } 

} 

"[通常]残りの部分"は実行されず、[残りの部分は実行されません]が実行されないのはなぜですか?説明してください。コード実行の相違点を説明してください

+1

課題のどの部分を理解していませんか? –

+1

'return 0;は何と思いますか? – Savior

+0

'[except]コードの残りの部分は実行中です。 – Savior

答えて

2
  1. testNormal0からreturn 0まではどこかに格納され、finallyブロック内のコードが実行され、その格納された値が返されます。

  2. testException。例外がスローされます。 catchのコードが実行されました。その後、ブロックfinallyのコードが実行されます。プログラム制御は、System.out.printlnから続き、-1が返されます。

より興味深いfinally自体がreturnを含む場合があります。その場合、ブロックfinallyの戻り値が返され、以前のreturnから遭遇した格納値は破棄されます。

関連する問題