关于try catch finally
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后,方法就用抛出异常的方式推出了。
注:由于没有catch块捕获异常,所以在方法后面的声明抛出异常。
总结:在catch块和finally块中仍然可以再抛出新的异常,如果对于新抛出的异常没有写try的话,在方法后面的声明抛出新的异常。如果try块或者catc块的异常再添加外层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);
- }
- }

浙公网安备 33010602011771号