try catch finally return
结论:不论什么运行try 或者catch中的return语句之前,都会先运行finally语句,假设finally存在的话。
假设finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,
输出结果是:
执行结果:
输出:
假设finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,
编译器把finally中的return实现为一个warning。
可是须要注意的是。经过測试表明:在try 或者catch中的return语句,假设return的是int、long、double常量类型以及String、Integer等的封装类型,那么在finally中对return变量的值的改动不会影响在try 或者catch中的return语句的返回结果。
而恰好相反的是:在在try 或者catch中的return语句。假设return的是List等等对象类型的值,那么在finally中对其值的改动会影响try 或者catch中的return语句的返回结果。
当然, 假设在finally中运行return语句,finally对返回值的改动都会影响返回值。
举例说明1:
public static int tryCatchFinallyReturn(){ int a = 1; int b = 100; try{ a = 2; return a+b-2; }catch(Exception e){ e.printStackTrace(); } finally{ System.out.println("finally"); a = 4; System.out.println(a); System.out.println("finally2"); } return a+b; }
main方法: int c = tryCatchFinallyReturn(); System.out.print(c);
输出结果是:
finally 4 finally2 100说明尽管a的值改为了4。但try中的返回值并没有被改动。
举例说明2:
public static List tryTest(){ List<Integer> list = new ArrayList<Integer>(); int a = 2; try{ list.add(new Integer(a)); for(Integer ii :list){ System.out.println(ii.intValue()+"----"); } return list; }catch(Exception e){ e.printStackTrace(); }finally{ System.out.println("finally"); a = 4; System.out.println(a); list.add(new Integer(a)); System.out.println("finally2"); for(Integer ii :list){ System.out.println(ii.intValue()+"----"); } } return list; }
main方法: List<Integer> a = tryTest(); for(Integer b:a){ System.out.println(b.intValue()+"----main"); }
执行结果:
2---- finally 4 finally2 2---- 4---- 2----main 4----main说明影响了对象类型的返回结果。
举例说明3:
public static String trytestString(){ String a = "aaa"; String b = "bbb"; try{ a = "aaa2"; return a+b; }catch(Exception e){ e.printStackTrace(); } finally{ System.out.println("finally"); a = "aaa3"; System.out.println(a); System.out.println("finally2"); } return a+b; }
main方法: System.out.println(trytestString());
输出:
finally aaa3 finally2 aaa2bbb跟返回常量结果一样。
public static String trytestString(){ String a = "aaa"; String b = new String("bbb"); try{ a = "aaa2"; return a+b; }catch(Exception e){ e.printStackTrace(); } finally{ System.out.println("finally"); a = "aaa3"+ new String("1122"); System.out.println(a); System.out.println("finally2"); } return a+b; }main:
System.out.println(trytestString());输出结果:
finally aaa31122 finally2 aaa2bbb