-1

这是测验中我感到困惑的一个问题。给定代码片段:

public void foo(){
    try{
        System.out.println(“starting”);
        bar();
        System.out.println(“passed bar”);
    }catch(Exception e){
        System.out.println(“foo exception”);
}

给出上面的方法 foo() 的输出 IF bar() 抛出异常

我的回答是:

开始

富异常

那是对的吗?

你能告诉我如何测试它或向我解释吗?非常感谢您的帮助!!

我现在明白了,非常感谢您非常快速和有用的回复

4

4 回答 4

1

你可以这样测试它:

public static void main(String[] args) {
    try {
        System.out.println("Starting");
        bar();
        System.out.println("passed bar");
    } catch (Exception e) {
        System.out.println("foo exception");
    }
}

private static void bar() throws Exception {
    throw new Exception();
}

按预期输出:

启动
foo 异常

第一行将按预期显示。之后它会bar()抛出一个错误并立即在catch块中继续。该块输出第二条消息。

于 2013-10-19T23:21:59.100 回答
1

你是对的,第一个println将简单地运行没有问题,然后bar运行并抛出一个异常,因为你已经将它包含在 a 中try并且已经用最抽象的异常(Exception类型)覆盖了所有类型的异常,所以所有类型的异常都会被捕获,当这种情况发生时,catch代码块将运行(意味着将打印“foo 异常”),并且程序将像往常一样继续执行任何操作。因为它被抓住了第二个println永远不会运行。

于 2013-10-19T23:24:38.080 回答
0

您可以通过自己编写bar()方法来测试它:p

void bar() throws Exception {
  throw new Exception();
}
于 2013-10-19T23:21:11.210 回答
0

除了 Jeroen Vannevel 的回答之外,以下代码输出为:

Starting
i catched an exception in bar()
passed bar

.

    public static void main(String[] args) {
        try {
            System.out.println("Starting");
            bar();
            System.out.println("passed bar");
        } catch (Exception e) {
            System.out.println("foo exception");
        }
    }

    private static void bar() throws Exception {
        try {
            throw new Exception();
        } catch (Exception e) {
            System.out.println("i catched an exception in bar()");
        }
    }
于 2013-10-19T23:39:12.317 回答