0

我无法理解这个程序。我希望它输出“Hello World”,但它只打印“World”。我认为首先该try块会执行,打印“Hello”和“”,然后当它遇到 a 时1/0,它会抛出一个ArithmeticException。异常将被catch块捕获,然后将打印“世界”。

程序如下。

 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 回答
0

将首先检查在 println 函数/方法中传递的参数,然后调用 println。因此,在调用 println 之前会出现异常。由于引发异常,控制将被捕获,并且只会打印“世界”

于 2021-12-27T18:08:12.650 回答
0

它将逐条检查语句。因此,它检查整个 println 参数。但是,它有一个例外,因此执行 catch 块。

注意:如果它执行前半部分语句并检查异常,则不需要 try-catch 块。

于 2021-12-27T18:14:34.063 回答