如果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