java捕获sql异常_Java 异常处理的十个建议

前言

Java异常处理的十个建议,希望对大家有帮助~

本文已上传github:

https:// github.com/whx123/JavaH ome

公众号:捡田螺的小男孩

一、尽量不要使用e.printStackTrace(),而是使用log打印。

反例:

  1. try{
  2. // do what you want
  3. }catch(Exception e){
  4. e.printStackTrace();
  5. }

正例:

  1. try{
  2. // do what you want
  3. }catch(Exception e){
  4. log.info("你的程序有异常啦,{}",e);
  5. }

理由:

  • printStackTrace()打印出的堆栈日志跟业务代码日志是交错混合在一起的,通常排查异常日志不太方便。
  • e.printStackTrace()语句产生的字符串记录的是堆栈信息,如果信息太长太多,字符串常量池所在的内存块没有空间了,即内存满了,那么,用户的请求就卡住啦~

二、catch了异常,但是没有打印出具体的exception,无法更好定位问题

反例:

  1. try{
  2. // do what you want
  3. }catch(Exception e){
  4. log.info("你的程序有异常啦");
  5. }

正例:

  1. try{
  2. // do what you want
  3. }catch(Exception e){
  4. log.info("你的程序有异常啦,{}",e);
  5. }

理由:

  • 反例中,并没有把exception出来,到时候排查问题就不好查了啦,到底是SQl写错的异常还是IO异常,还是其他呢?所以应该把exception打印到日志中哦~

三、不要用一个Exception捕捉所有可能的异常

反例:

  1. public void test(){
  2. try{
  3. //…抛出 IOException 的代码调用
  4. //…抛出 SQLException 的代码调用
  5. }catch(Exception e){
  6. //用基类 Exception 捕捉的所有可能的异常,如果多个层次都这样捕捉,会丢失原始异常的有效信息哦
  7. log.info(“Exception in test,exception:{}”, e);
  8. }
  9. }

正例:

  1. public void test(){
  2. try{
  3. //…抛出 IOException 的代码调用
  4. //…抛出 SQLException 的代码调用
  5. }catch(IOException e){
  6. //仅仅捕捉 IOException
  7. log.info(“IOException in test,exception:{}”, e);
  8. }catch(SQLException e){
  9. //仅仅捕捉 SQLException
  10. log.info(“SQLException in test,exception:{}”, e);
  11. }
  12. }

理由:

  • 用基类 Exception 捕捉的所有可能的异常,如果多个层次都这样捕捉,会丢失原始异常的有效信息哦

四、记得使用finally关闭流资源或者直接使用try-with-resource

反例:

  1. FileInputStream fdIn = null;
  2. try {
  3. fdIn = new FileInputStream(new <
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值