我无法理解这个程序。我希望它输出“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");
}
}
}
在调用
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");
}
首先将评估
"Hello"+" "+1/0
。然后作为参数传递给System.out.println(...)
。这就是为什么在调用 System.out.println(...)
之前抛出异常。
它并不是简单地从左到右扫描“单词”。
( )
内的所有内容都需要成功评估,如果成功则将其打印出来。
看到“你好”就没事了。 接下来它查看 1/0 并产生错误。
如果数学计算成功,它将尝试连接“Hello”和结果。如果成功,就会被打印出来。
它将逐条检查语句。因此,它检查整个 println 参数。但是,它有一个异常,所以执行 catch 块。
注意:如果它执行前半条语句并检查异常,则不需要 try-catch 块。
将首先检查在 println 函数/方法中传递的参数,然后调用 println。因此,在调用 println 之前会出现异常。由于引发异常,控制将转到 catch 并仅打印“World”