情况1:try{} catch(){}finally{} return;
按正常顺序执行。
情况2:try{ return; }catch(){} finally{} return;
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,最后执行try中return;
finally块后面的return语句不再执行。
情况3:try{ } catch(){return;} finally{} return;
程序先执行try,如果遇到异常执行catch块,
有异常:
则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,
最后执行catch块中return. finally块后面的return语句不再执行。
无异常:
执行完try再finally再执行最后的return语句.
情况4:try{ return; }catch(){} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。
情况5:try{} catch(){return;}finally{return;}
程序执行catch块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。
情况6:try{ return;}catch(){return;} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
则再执行finally块,因为finally块中有return所以提前退出。
无异常:则再执行finally块,因为finally块中有return所以提前退出。
package com.longlonggo.review02; /** * try-catch-finally运行顺序测试 * @author longlonggo.com * @version * 版本号:【100-000-000】<br/> * 创建日期::2017年2月6日 <br/> * 历史修订:<br/> */ public class Review02 { public static void main(String[] args) { System.out.println("-------" + myTest()); } /** * try-catch-finally测试方法 * * @return 测试结果 */ public static String myTest() { // //正常流程返回3 // try { // } catch (Exception e) { // } finally{ // } // return "3"; // //正常执行try返回2 // try { // return "2"; // } catch (Exception e) { // } finally{ // } // return "3"; // //try出现异常时,catch中返回2 // try { // int c = 1 / 0; // return c + ""; // } catch (Exception e) { // return "2"; // } finally{ // } // return "3"; // try中有异常时执行catch中所有代码,包括catch中return函数的语句(不返回), // 然后执行finally,此时finally中有返回,所以跳出finally中的return,又因为catch中改变了num值 // 所以会有输出结果:num:11, -------12 int num = 11; try { num = 1 / 0; } catch (Exception e) { System.out.println("num:" + num); return num++ + ""; } finally { return num + ""; } } }