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.在catch块和finally块中仍然可以再抛出新的异常

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

 

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

反之,如果给catch块或finally块里的异常再套上一层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);
 }
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lovecj6185/archive/2009/08/19/4461516.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值