148、以下 Java 程序的输出是什么?
public class Main {
void a() {
try {
System.out.println("a(): Main called");
b();
} catch (Exception e) {
System.out.println("Exception is caught");
}
}
void b() throws Exception {
try {
System.out.println("b(): Main called");
c();
} catch (Exception e) {
throw new Exception();
} finally {
System.out.println("finally block is called");
}
}
void c() throws Exception {
throw new Exception();
}
public static void main(String args[]) {
Main m = new Main();
m.a();
}
}
上面代码运行结果如下:
a(): Main called
b(): Main called
finally block is called
Exception is caught
解释:在 main
方法中,调用 Main 的 a()
打印一条消息并调用 b()
。 方法 b()
打印一些消息,然后调用 c()
。 方法 c()
抛出一个异常,该异常由方法 b()
的 catch
块处理。 但是,它通过使用 throw Exception()
来传播此异常,并由方法 a()
处理。 正如我们所知,finally
块总是被执行,因此方法 b()
中的 finally 块首先被执行并打印一条消息。 最后,异常由方法 a()
的 catch
块处理。