关于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)