1, regardless of the occurrence of wood anomalies, finally block code will be executed;
2, when there is return in the try and catch, finally will still execute;
3, finally is executed after the return of the expression after the operation (at this time does not return the value of the operation, but first to save the value to return, the pipe finally in the code, the return value will not change, still is the value of the previous saved), So the function return value is determined before the finally execution;
4, finally, it is best not to include return, or the program will exit early, the return value is not a try or catch in the saved return value.
Example:
Case 1:try{} catch () {}finally{} return;
Obviously the program executes sequentially.
Case 2:try{return;} catch () {} finally{} return;
The program executes code in the try block before return ( including expression operations in the return statement );
Then execute the finally block and finally execute the return in try;
The statement after the finally block return, because the program has already been return in the try and is no longer executed.
Case 3:try{} catch () {return;} finally{} return;
The program executes the try first, and if an exception is encountered to execute a catch block,
There is an exception: executes the code in the catch before return, including the expression operation in the return statement,
Then execute all the code in the finally statement,
Finally executes the return in the catch block. Finally, the code at 4 is no longer executed.
No exception: After executing the try and finally return.
Case 4:try{return;} catch () {} Finally{return;}
The program executes code in the try block before return ( including expression operations in the return statement );
Then execute the finally block, because there is a return in the finally block and exit early.
Case 5:try{} catch () {return;} Finally{return;}
The program executes the code in the Catch block before return ( including the expression operation in the return statement );
Then execute the finally block, because there is a return in the finally block and exit early.
case 6:try{return;} catch () {return;} Finally{return;}
Before the program executes return in the try block (include expression operations in the return statementCode
Exception: Executes the code in the Catch block before return, including the expression operation in the return statement;
Then the finally block is executed because there is a return in the finally block and exits early.
No exception: Then the finally block is executed, because there is a return in the finally block and exits early.
Final Conclusion: Any execution of a return statement in a try or catch is preceded by a finally statement, if finally exists.
If there is a return statement in Finally, then the program will return, so the return in the finally is bound to return,
The compiler implements the return in finally as a warning.
Java Foundation--try Catch final