您的位置:首页 > 编程语言 > Java开发

Java try catch finally的执行顺序

2013-04-17 11:24 357 查看
关于Java中try catch finally 的执行顺序一直是入职笔试的一个热门,其实在实际的项目中还是遇到的比较多,所以整理如下:

需要首先注意的几点:

1) try catch finally中的finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.

2) Java 编译器不允许有显示的执行不到的语句块,比如return之后就不可能再有别的语句块(分支不属于此列) 所以以下程序编译会报错:

Java代码







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; }

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)

Java代码







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"; } }

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";
}
}


输出结果为:

Java代码







in try... In finally.... finally(return value)

in try...
In finally....
finally(return value)

2)

Java代码







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"; } }

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代码







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)

【原文:/article/7525572.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: