易百教程

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 块处理。