写java程序经常碰到异常,try-catch-finally与return的执行顺序不是很清晰,总是调整到编译通过就放在那里了,没有细致的研究过,碰到的次数多了,很烦!
测试一下(一):只有try-catch return语句在try里面。javac Test.java编译时报错:缺少返回语句。
return语句放在catch后面,成功。
public class Test{
public static void main(String args[]){
System.out.println(a());
}
private static String a(){
try{
//throw new Exception();
System.out.println("In TRY");
return "返回值";
}catch(Exception e){
System.out.println("In Catch");
}
//finally{
//System.out.println("In FINALLY");
//return "返回值";
//}
//System.out.println("Afer finally In Return");
}
}
测试二:
public class Test{
public static void main(String args[]){
System.out.println(a());
}
private static String a(){
try{
//throw new Exception();
System.out.println("In TRY");
return "返回值";
}catch(Exception e){
System.out.println("In Catch");
}
finally{
System.out.println("In FINALLY");
}
//System.out.println("Afer finally In Return");
return "返回值";
}
}
结果:
In TRY
In FINALLY
返回值
测试(三):return在finally前面,编译报错finally不带有try块。
public class Test{
public static void main(String args[]){
System.out.println(a());
}
private static String a(){
try{
//throw new Exception();
System.out.println("In TRY");
return "返回值";
}catch(Exception e){
System.out.println("In Catch");
}
return "返回值";
finally{
System.out.println("In FINALLY");
}
//System.out.println("Afer finally In Return");
}
}
测试(四):返回值在finally块里面:
public class Test{
public static void main(String args[]){
System.out.println(a());
}
private static String a(){
try{
//throw new Exception();
System.out.println("In TRY");
return "返回值";
}catch(Exception e){
System.out.println("In Catch");
}
finally{
System.out.println("In FINALLY");
return "返回值";
}
//System.out.println("Afer finally In Return");
}
}
结果:与测试二一样。
测试(四):
public class Test{
public static void main(String args[]){
System.out.println(a());
}
private static String a(){
try{
//throw new Exception();
System.out.println("In TRY");
return "返回值";
}catch(Exception e){
System.out.println("In Catch");
}
System.out.println("Afer Catch before finally !");
finally{
System.out.println("In FINALLY");
return "返回值";
}
//System.out.println("Afer finally In Return");
}
}
结果:编译报错 finally不带有try。说明try-catch-finally必须连在一起中间不能有语句。
结论:try-catch-finally必须连在一起中间不能有语句。return语句只能放到finally块得后面或者是finally块里面的最后一句话。即程序的最后面。即try-(catch)-finally-return的顺序执行。