2016-06-29 74 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

了解先生。万分感激。 –