【问题标题】:Java Exception Handling understanding issueJava 异常处理理解问题
【发布时间】:2016-06-29 18:20:36
【问题描述】:

我无法理解这个程序。我希望它输出“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");
         }
     }
 }

【问题讨论】:

  • 为什么你认为它会在评估1/0之前打印"Hello"
  • 它必须在打印任何内容之前解释"Hello" + " " + 1/0 的值。 "Hello" 没有被打印,因为你不是说要打印 just "Hello",而是 "Hello" 加上导致异常的东西。
  • 谢谢@ChrisSprague。我明白了。

标签: java exception-handling arithmeticexception


【解决方案1】:

在调用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");
     }

【讨论】:

  • 谢谢你的回答,现在明白了。
【解决方案2】:

将评估第一个 "Hello"+" "+1/0。然后作为参数传递给System.out.println(...)。这就是为什么在调用System.out.println(...) 之前抛出异常的原因。

【讨论】:

  • 这很有帮助,感谢您抽出宝贵时间回复。
  • 快乐归我所有。
【解决方案3】:

它不只是从左到右扫描“单词”。 ( ) 中的所有内容都需要成功评估,如果是,则将其打印出来。

它看着“你好”,没关系。 接下来它查看 1/0 并创建错误。

如果数学计算成功,它将尝试连接“Hello”和结果。如果成功了,就会被打印出来。

【讨论】:

  • 明白,先生。真的很感激。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    它会逐句检查。因此,它检查整个 println 参数。但是,它有一个异常,所以执行 catch 块。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 2010-09-29
      • 1970-01-01
      • 2011-01-18
      相关资源
      最近更新 更多