跳到主要内容

简述try catch finally,try里有return,finally还执行么 ?

参考答案:

在Java中,try-catch-finally语句用于处理可能发生的异常。其基本结构如下:

try {
    // 尝试执行的代码块
    // 如果有异常发生,跳转到相应的catch块
} catch (ExceptionType1 e) {
    // 处理ExceptionType1异常的代码块
} catch (ExceptionType2 e) {
    // 处理ExceptionType2异常的代码块
    // 可以有多个catch块来处理不同类型的异常
} finally {
    // 无论是否发生异常,都会执行的代码块
}

现在,关于你的问题,如果try块中有return语句,并且该return语句被执行了,那么finally块仍然会执行。但是,需要注意的是,finally块中的代码执行完毕后,控制权会返回给try块中的return语句,从而完成方法的返回。这意味着,finally块中的代码不能改变try块中return语句的结果。

下面是一个简单的示例:

public int testMethod() {
    try {
        System.out.println("Try block");
        return 1; // 假设这行代码被执行了
    } catch (Exception e) {
        System.out.println("Catch block");
        return 2;
    } finally {
        System.out.println("Finally block");
        // 注意:这里不能改变try块中return语句的结果
        // 比如,下面的代码是无效的:
        // return 3; // 这会导致编译错误
    }
}

在这个例子中,即使try块中的return语句被执行了,finally块仍然会执行。当你调用testMethod()方法时,输出顺序将会是:

Try block
Finally block

并且方法会返回1,而不是finally块中的任何值(如果有的话)。这是因为finally块中的代码不能改变try块中return语句的结果。