只要try{}里面没有System.exit(),finally{}里面的code就会执行;
package com.test;public class TryAndFinally { public String ff(){ System.out.println("ff()"); return "111"; } public String hh(){ try{ return ff(); }catch(Exception e){ System.out.println("e"); }finally{ System.out.println("finally"); return "finally"; } } public static void main(String[] args){ TryAndFinally taf=new TryAndFinally(); taf.hh(); }}
执行的结果是:ff() finally
他们的执行程序是:先执行ff()方法,然后当遇到try{}里面的return时,程序就自动执行finally{}然后在return。
所以说finally{}既可以说是在return之前执行也可以说是在执行return的中间执行。
如果
package com.test;public class TryAndFinally { public String ff(){ System.out.println("ff()"); return "111"; } public String hh(){ try{ //return ff(); System.exit(1); }catch(Exception e){ System.out.println("e"); }finally{ System.out.println("finally"); return "finally"; } } public static void main(String[] args){ TryAndFinally taf=new TryAndFinally(); taf.hh(); }}
执行的结果是空,因为执行System.exit()就推出了虚拟机,finally{}不再执行。