The execution order of the try catch finally in the case of a return

Source: Internet
Author: User
Tags finally block try catch

 

Conclusion:
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:


Scenario 1: try{} catch () {}finally{} return;
Obviously the program executes sequentially.
Scenario 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.
Scenario 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, and then executes 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.
Scenario 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.
Scenario 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.
Scenario 6: try{return;} catch () {return;} Finally{return;}
The program executes code in the try block before return (including expression operations in the return statement);
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.

here is a test program public class Finallytest  {public static void main (string[] args) {System.out.println (new Finallytest (). Test ());;} static int test () {int x = 1;try{x++;return x;} finally{++x;}}}  The result is 2. 
Analysis:
In a try statement, when the return statement is executed, the result to be returned is ready, at which point the program goes to finally executes. Before you go, try to store the result to be returned in a different local variable from the X, and after the finally is executed, the returned result is removed from it, so even if the variable x is changed in Finally, it does not affect the return result. It should use the stack to hold the return value.

The execution order of the try catch finally in the case of a return

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.