关于Java中try catch finally 的执行顺序一直是入职笔试的一个热门,其实在实际的项目中还是遇到的比较多,所以整理如下:
需要首先注意的几点:
1) try catch finally中的finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.
2) Java 编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块(分支不属于此列) 所以以下程序编译会报错:
- public String testSeq(){
- String result = "";
- int i = 0;
- try{
- System.out.println(6/i);
- System.out.println("in try...");
- //return "try";
- }catch(Exception e){
- e.printStackTrace();
- System.out.println("In catch..."); //return "catch";
- }finally{
- System.out.println("In finally....");
- return "finally";
- }
- return result;
- }
(原因是finally块中已经存在return)
几个关于try catch finally的小例子:
1)
- public String testSeq(){
- String result = "";
- int i = 0;
- try{
- System.out.println("in try...");
- return "try";
- }catch(Exception e){
- e.printStackTrace();
- System.out.println("In catch...");
- return "catch";
- }finally{
- System.out.println("In finally...."); return "finally";
- }
- }
输出结果为:
- in try...
- In finally....
- finally(return value)
2)
- public String testSeq(){
- String result = "";
- int i = 0;
- try{
- i = 7/i;
- System.out.println("in try...");
- return "try";
- }catch(Exception e){
- e.printStackTrace();
- System.out.println("In catch...");
- return "catch";
- }finally{
- System.out.println("In finally....");
- return "finally";
- }
- }
输出结果:
- java.lang.ArithmeticException: / by zero at com.ncs.eric.TestTryCatchFinally.testSeq(TestTryCatchFinally.java:9) at com.ncs.eric.TestTryCatchFinally.main(TestTryCatchFinally.java:24)
- In catch...
- In finally....
- finally(return value)
文章转自:http://diaolanshan.iteye.com/blog/537215