1、在没有异常的情况下,try 中的返回值先保存到临时区域里再去执行finally ,这个finally 有返回值,这个返回值将之前try中的保存到临时区域的值用返回的这个值替换,再将这个临时区域中的值返回给上一级方法。
2、如果有异常,则执行catch中的代码,这里的return 将返回一个返回值放到临时区域,再去执行finally ,这个finally有返回值,这样就将catch中存在临时区域中的值用这个finally 返回的值替换掉,在将这个临时区域的值返回给上一级方法。
例子: public class FileSystemTest{ public static void main(String[] args) { System.out.println("test= "+test()); System.out.println("finish= "); } private static int test() { int b =20; try{ System.out.println("try"); return b+=1; //case3 //return 1; }catch(Exception e){ System.out.println("catch"); return 0; }finally{ System.out.println("finally"); System.out.println("b= "+b); b++; //case1 //return b; //case2 //return 10; } } }
结果:
对于正常运行,test =21
case1: test =22
case2:test =10
case3:test =1