Java异常处理理解问题

问题描述 投票:0回答:5

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

1
投票

首先将评估

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


1
投票

它并不是简单地从左到右扫描“单词”。

( )
内的所有内容都需要成功评估,如果成功则将其打印出来。

看到“你好”就没事了。 接下来它查看 1/0 并产生错误。

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


1
投票

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.