捕获异常

一.异常捕获

  • 如果某个异常发生时没有在任何地方进行捕获,那程序就会终止执行,并在控制台上打印出异常信息,其中包括异常的类型和堆栈的内容。
  • 想要捕获一个异常,必须设置try/catch语句块,如下方
public void read(String filename){
        try {
            FileInputStream in = new FileInputStream(filename);
            int b;
            while (true){
                if (!((b=in.read())!=-1)) break;
                ...
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 如果在try语句块中的任何代码抛出一个在catch字句中说明的异常类,那么
程序将跳过try语句块的其余代码
程序将执行catch字句中的处理代码
  • 如果在try语句块中的代码没有抛出任何异常,那么程序将跳过catch子句。

二.捕获多个异常

  • 在一个try语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理。
try{
	 //code that might throw exception
	}catch (FileNotFoundException e){
    //emergency action for missing files
	}catch (UnknownHostException e){
    //emergency action for unknow hosts
	}catch (IOException e){
    //emergency action for all other I/O problrems
}
  • 在Java SE 7中,同一个catch子句中可以捕获多个异常类型。例如,假设对应缺少文件和未知主机异常的动作是一样的,就可以合并catch子句
try{
         //code that might throw exception
        }catch (FileNotFoundException | UnknownHostException e){
         //emergency action for missing files and unknow hosts
        }catch (IOException e){
         //emergency action for all other I/O problrems
        }
    }

三.再次抛出异常与异常链

  • catch子句中可以抛出一个异常,这样做的目的是改变异常的类型。如果开发了一个供其他程序员使用的子系统,那么,用于表示子系统故障的异常类型可能会产生多种解释。
  • ServletException就是这样一个异常类型的例子。执行servlet的代码可能不想知道发生错误的细节原因,但希望明确地知道servlet是否有问题。
 try{
            //access the database    
        }catch (SQLException e){
            //throw new ServletException("database error:"+e.getMessage());
            Throwable error = new ServletException("database error");
            error.initCause(e);
            throw error;
        }
  • 当捕获到异常时,就可以使用Throwable e = error.getCause()。这样可以让用户抛出子系统中的高级异常,而不会丢失原始异常的细节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值