try catch finally的执行顺序
1.try catch finally中的finally不管在什么情况之下都会执行,执行的时间是在程序return之前。
2.Java编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块(分支不属于此列),所以以下程序编译会报错:
?
package com.practice.model;public class Test {public String testSeq() {String result="end";int i = 0;try {System.out.println(6/i);//System.out.println(i);System.out.println("in try...");return result;} catch (Exception e) {e.printStackTrace();System.out.println("In catch...");return result;} finally {System.out.println("In finally....");//return result;}return result;}public static void main(String[] args){Test test=new Test();String rs=test.testSeq();System.out.println("result = "+rs);}}
?原因是由于try{...}catch{...}块中都已存在return。
3.以下是几个小例子:
1)
package com.practice.model;public class Test {public String testSeq() {String result1="Normal"; String result2="Exception";int i = 0;try {//System.out.println(6/i);System.out.println(i);System.out.println("in try...");return result1;} catch (Exception e) {e.printStackTrace();System.out.println("In catch...");return result2;} finally {System.out.println("In finally....");}}public static void main(String[] args){Test test=new Test();String rs=test.testSeq();System.out.println("result = "+rs);}}
?
执行结果是:
0in try...In finally....result = Normal?
?
?
2)
package com.practice.model;public class Test {public String testSeq() {String result1="Normal"; String result2="Exception";int i = 0;try {System.out.println(6/i);//System.out.println(i);System.out.println("in try...");return result1;} catch (Exception e) {e.printStackTrace();System.out.println("In catch...");return result2;} finally {System.out.println("In finally....");}}public static void main(String[] args){Test test=new Test();String rs=test.testSeq();System.out.println("result = "+rs);}}
?
执行结果是:
java.lang.ArithmeticException: / by zeroat com.practice.model.Test.testSeq(Test.java:9)at com.practice.model.Test.main(Test.java:24)In catch...In finally....result = Exception?
?