Java中try-catch-finally的执行流程

文档

A try statement with a finally block is executed by first executing the try block. Then there is a choice:

  • If execution of the try block completes normally, then the finally block is executed, and then there is a choice:

    • If the finally block completes normally, then the try statement completes normally.

    • If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S.

  • If execution of the try block completes abruptly because of a throw of a value V, then there is a choice:

    • If the run-time type of V is assignment compatible with a catchable exception class of any catch clause of the try statement, then the first (leftmost) such catch clause is selected. The value V is assigned to the parameter of the selected catch clause, and the Block of that catch clause is executed. Then there is a choice:

      • If the catch block completes normally, then the finally block is executed. Then there is a choice:

        • If the finally block completes normally, then the try statement completes normally.

        • If the finally block completes abruptly for any reason, then the try statement completes abruptly for the same reason.

      • If the catch block completes abruptly for reason R, then the finally block is executed. Then there is a choice:

        • If the finally block completes normally, then the try statement completes abruptly for reason R.

        • If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S (and reason R is discarded).

    • If the run-time type of V is not assignment compatible with a catchable exception class of any catch clause of the try statement, then the finally block is executed. Then there is a choice:

      • If the finally block completes normally, then the try statement completes abruptly because of a throw of the value V.

      • If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S (and the throw of value V is discarded and forgotten).

  • If execution of the try block completes abruptly for any other reason R, then the finally block is executed, and then there is a choice:

    • If the finally block completes normally, then the try statement completes abruptly for reason R.

    • If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S (and reason R is discarded).

流程图

try-catch-finally执行流程图.png

参考文献

java8规范

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容