1、finally在try ...catch 执行完毕后一定会执行的
2、Exception可以多次捕抓,但是只捕抓一次,为匹配的最子类的那个
实例如下:
finally什么时候执行
第一种情况:boolean b = false;执行结果为public class FinallyTest { public void test(){ boolean b = false; try{ System.out.println("in test"); if(b) throw new IOException(); }catch(IOException e){ System.out.println("in IOException"); }catch(Exception e){ System.out.println("in Exception"); }finally{ System.out.println("in finally"); } } public static void main(String[] args){ FinallyTest f = new FinallyTest(); f.test(); } }
第二种情况:boolean b = true;执行结果为in test in finally
捕抓哪个Exceptionin test in IOException in finally
第一种情况:抛出IOException的时候
执行结果为:import java.io.IOException; public class FinallyTest { public void test(){ boolean b = true; try{ System.out.println("in test"); if(b) throw new IOException(); }catch(IOException e){ System.out.println("in IOException"); }catch(Exception e){ System.out.println("in Exception"); }finally{ System.out.println("in finally"); } } public static void main(String[] args){ FinallyTest f = new FinallyTest(); f.test(); } }
in test in IOException in finally
第二种情况:当抛出Exception时,其结果为
in test in Exception in finally
执行的是父类异常中的语句,即被最匹配的Exception异常捕获