return返回时不是直接返回变量的值,而是复制一份,然后返回。
对于基本类型的数据,在finally中改变return的值对与返回值是没有影响的;然而对于引用类型的数据会有影响。
package fianllyreturn;
public class Test {
public static int testFinally(){
int result = 1;
try {
result = 2;
return result;
} catch (Exception e) {
return 0;
}finally{
result = 3;//此时是对上述result=2的返回是没有影响的
System.out.println("finally1");
}
}
public static StringBuffer testFinally2(){
StringBuffer s = new StringBuffer("hello");
try {
return s;
} catch (Exception e) {
return null;
}finally{
s.append("World");
System.out.println("fianlly2");
}
}
public static void main(String[] args) {
int resultVal = testFinally();
System.out.println(resultVal);
StringBuffer resultRef = testFinally2();
System.out.println(resultRef);
}
}
程序在执行到return的时候首先将会将返回值存储在一个指定的位置,然后去执行finally中的代码,最后再返回。
注意:出现在java中的finally块代码不一定会执行