try-catch-finally与return的执行顺序

      写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的顺序执行。

你可能感兴趣的:(finally)