java 如何忽略异常_忽略 - Java异常选择和使用的误区和经验总结

误区四、忽略异常

如下异常处理只是将异常输出到控制台,没有任何意义。而且这里出现了异常并没有中断程序,进而调用代码继续执行,导致更多的异常。

清单 4

public void retrieveObjectById(Long id){

try{

//。.some code that throws SQLException

}catch(SQLException ex){

/**

*了解的人都知道,这里的异常打印毫无意义,仅仅是将错误堆栈输出到控制台。

* 而在 Production 环境中,需要将错误堆栈输出到日志。

* 而且这里 catch 处理之后程序继续执行,会导致进一步的问题*/

ex.printStacktrace();

}

}

可以重构成:

清单 5

public void retrieveObjectById(Long id){

try{

//。.some code that throws SQLException

}

catch(SQLException ex){

throw new RuntimeException(“Exception in retieveObjectById”, ex);

}

finally{

//clean up resultset, statement, connection etc

}

}

这个误区比较基本,一般情况下都不会犯此低级错误J。

误区五、将异常包含在循环语句块中

如下代码所示,异常包含在 for 循环语句块中。

清单 6

for(int i=0; i《100; i++){

try{

}catch(XXXException e){

//…。

}

}

我们都知道异常处理占用系统资源。一看,大家都认为不会犯这样的错误。换个角度,类 A 中执行了一段循环,循环中调用了 B 类的方法,B 类中被调用的方法却又包含 try-catch 这样的语句块。褪去类的层次结构,代码和上面如出一辙。

误区六、利用 Exception 捕捉所有潜在的异常

一段方法执行过程中抛出了几个不同类型的异常,为了代码简洁,利用基类 Exception 捕捉所有潜在的异常,如下例所示:

清单 7

public void retrieveObjectById(Long id){

try{

//…抛出 IOException 的代码调用

//…抛出 SQLException 的代码调用

}catch(Exception e){

//这里利用基类 Exception 捕捉的所有潜在的异常,如果多个层次这样捕捉,会丢失原始异常的有效信息

throw new RuntimeException(“Exception in retieveObjectById”, e);

}

}

可以重构成

清单 8

public void retrieveObjectById(Long id){

try{

//。.some code that throws RuntimeException, IOException, SQLException

}catch(IOException e){

//仅仅捕捉 IOException

throw new RuntimeException(/*指定这里 IOException 对应的错误代码*/code,“Exception in retieveObjectById”, e);

}catch(SQLException e){

//仅仅捕捉 SQLException

throw new RuntimeException(/*指定这里 SQLException 对应的错误代码*/code,“Exception in retieveObjectById”, e);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值