try-catch-finally的方法中语句执行规则

当Java程序执行try块,catch块时遇到了return语句,return语句会导致该方法立即结束。系统执行完return语句之后,并不会立即结束该方法,而是去寻找该异常处理流程种是否包含finally块,如果没有finally块,方法终止,返回相应的返回值。如果有finally块,只有当finally块执行完成后,系统才会再次跳回来根据return语句结束方法。如果finally块里使用了return语句来导致方法结束,则finally块已经结束了方法,系统将不会跳回去执行try块,catch块里的任何代码。当然需要注意在进行异常捕获时,一定要记住先捕获小的异常,再捕获大的异常。

public class StudyFinally {
    public static void main(String[] args) {
        int a = test();
        System.out.println(a);
    }

    private static int test() {
        int count = 5;
        try{
            count = count / 0;
            System.out.println("try 语句块被执行了");
            return count++;
        }catch (Exception e){
            System.out.println("catch 语句块被执行了");
            throw e;
        } finally {
            System.out.println("finally 语句块被执行了");
            return count+2;
        }
    }
}
执行结果为:
catch 语句块被执行了
finally 语句块被执行了
7
以上程序再遇到了count/0时发生了异常,然后执行catch语句块中的语句,因为有finally语句块,所以执行finally语句块的语句,finally语句块里面又有return返回语句作为函数的结束,所以并不会抛出异常。

猜你喜欢

转载自blog.csdn.net/note_remark/article/details/80860402