finally_clause_and_return_clause_in_java

             The only time finally won't be called is if you call System.exit() or if the JVM crashes first.


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

  • If execution of the try block completes normally, [...]
  • If execution of the try block completes abruptly because of a throw of a value V, [...]
  • If execution of the try block completes abruptly for any other reasonR, then thefinally block is executed. Then there is a choice:
    • If the finally block completes normally, then the try statement completes abruptly for reasonR.
    • If the finally block completes abruptly for reason S, then thetry statement completes abruptly for reasonS (and reasonR is discarded).

ReturnStatement:
     return Expression(opt) ;

A return statement with no Expression attempts to transfer control to the invoker of the method or constructor that contains it.

A return statement with an Expression attempts to transfer control to the invoker of the method that contains it; the value of theExpression becomes the value of the method invocation.

The preceding descriptions say "attempts to transfer control" rather than just "transfers control" because if there are anytry statements within the method or constructor whosetry blocks contain thereturn statement, then any finally clauses of thosetry statements will be executed, in order, innermost to outermost, before control is transferred to the invoker of the method or constructor. Abrupt completion of afinally clause can disrupt the transfer of control initiated by areturn statement.


Ref: 

Does finally always execute in Java?

14.20.2 Execution of try-catch-finally se5                 se7

14.17 The return Statement  se5               se7


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值