2016-06-29 99 views
0

我無法理解此程序。我希望它輸出「Hello World」,但它只打印「世界」。我認爲首先try塊會執行,打印出「你好」和「」,然後當遇到1/0時,它會拋出一個ArithmeticExceptioncatch塊會捕獲異常,然後會打印「World」。Java異常處理理解問題

程序如下。

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"); 
     } 
    } 
} 
+1

爲什麼你在評估'1/0'之前會打印''Hello''? – user2357112

+1

在打印任何內容之前,它必須解釋'「Hello」+「」+ 1/0「的值。 ''Hello「'不會被打印出來,因爲你不是在打印_just_'」Hello「',而是'」Hello「'加上導致異常的東西。 –

+0

謝謝@ChrisSprague。我明白了。 –

回答

1

第一個"Hello"+" "+1/0將被評估。然後作爲參數傳遞給System.out.println(...)。這就是爲什麼在調用System.out.println(...)之前拋出異常。

+0

這非常有幫助,謝謝您的回覆。 –

+0

快樂是我的全部。 – Shiro

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"); 
    } 
+0

感謝您的回答,現在就明白了。 –

1

它不只是掃描「改爲」左到右。需要對()中的所有內容進行成功評估,如果是,則會打印出來。

它看着「你好」,它很好。 接下來它看着1/0並創建錯誤。

如果數學評估成功,它會試圖連接「你好」和結果。如果這是成功的,那麼它將被打印。

+0

瞭解先生。萬分感激。 –