0

私はこのプログラムを理解できません。「Hello World」を出力することを期待していますが、代わりに「World」のみを出力します。try最初にブロックが実行され、「Hello」と「」が出力され、その後 に遭遇する1/0と がスローされると思いましたArithmeticException。例外はcatchブロックごとにキャッチされ、「World」が出力されます。

プログラムは以下の通りです。

 import java.util.*;
 class exception{
     public static void main(String args[]) 
     {
         try
         {
             System.out.println("Hello"+" "+1/0);
         } 
         catch(ArithmeticException e) 
         {
             System.out.println("World");
         }
     }
 }
4

5 に答える 5

5

関数を呼び出す前に例外がスローされprintlnます。引数の値は、関数呼び出しの前に計算する必要があります。

プログラムで期待どおりの結果を得るには、tryブロック内のコードを次のように編集します。

     try
     {
         // this will work and execute before evaluating 1/0
         System.out.print("Hello ");
         // this will throw the exception
         System.out.print(1/0);
     } 
     catch(ArithmeticException e) 
     {
         System.out.println("World");
     }
于 2016-06-29T18:23:03.310 に答える
1

「単語」を単純に左から右にスキャンするだけではありません。内部のすべてが( )正常に評価される必要があり、評価されている場合は出力されます。

「こんにちは」と見て大丈夫です。次に 1/0 を見て、エラーを作成します。

数学が正常に評価された場合、「Hello」と結果を連結しようとします。そしてそれが成功すれば、それは印刷されるでしょう。

于 2016-06-29T18:29:40.660 に答える
1

まず"Hello"+" "+1/0評価されます。そして、 に引数として渡されますSystem.out.println(...)。そのため、呼び出される前に例外がスローSystem.out.println(...)されます。

于 2016-06-29T18:29:51.220 に答える