Java异常处理中try,catch,finally的各种组合用法

今天正好回一个朋友的帖子,便总结一下 java异常理的各方式

 

1.try+catch
程序的流程是:运行到try中,如果有异常抛出,则转catch理。然后catch后面的

2.try+catch+finally
程序的流程是:运行到try中,如果有异常抛出,则转catch,catch块执行完后,finally的代,再finally后面的代

如果没有异常抛出,行完try,也要去finally的代。然后finally后面的

3.try+finally
程序的流程是:运行到try,如果有异常抛出的,程序finally的代。那末finally后面的代码还会被?不会!因你没有理异常,所以遇到异常后,行完finally后,方法就已抛出异常的方式退出了。
这种方式中要注意的是,由于你没有捕异常,所以要在方法后面声明抛出异常

 

共同点:

1.catchfinally中仍然可以再抛出新的异常

例如 throw new Exception("illegal invoked");

 

如果新抛出的异常没有写try要在方法后面声明抛出异常

反之,如果catchfinally里的异常再套上一try,catch,方法后面就不必声明异常了

注意点:

每次执行后输出结果的顺序可能都不太相同,这是因为采用不同的流打印的结果,不必太在意

 

public class Test1 { /** * @param args * @throws MyException */ public static void main(String[] args) { //public static void main(String[] args) throws MyException { // TODO Auto-generated method stub TestException te = new TestException(); /* * try+catch * try{ te.test(); }catch(MyException e){ e.printStackTrace(); } System.out.println("after exception"); */ /* * try+catch+finally * try{ te.test(); }catch(MyException e){ e.printStackTrace(); }finally{ System.out.println("entry finally block"); } System.out.println("after exception"); */ /* * try+finally * try{ te.test(); }finally{ System.out.println("entry finally block"); } System.out.println("after exception"); */ } } class TestException { void test() throws MyException{ throw new MyException("illegal invoked"); } } class MyException extends Exception{ MyException(String msg){ super(msg); } }

 

 

你可能感兴趣的:(Java)