exception_process

1、捕获异常后,禁止直接 return

  • 若是抛出,则不要重复打印日志信息
  • 若是不抛出,打印出日志信息
  • 无论是传递错误信息,还是日志打印,一定要带上堆栈信息,如 new ServiceException(‘xxxx’,e);

2、尽量捕获特定异常,即自定义异常

一、运行时异常
代码无法处理,程序停止,即时throw掉,调用方不捕获也可以编译通过,如a方法只能处理int类型的数据,结果传进来一个汉字,就可以声明运行时异常。
二、检查异常
代码可以针对异常进行处理

3、不要在finally块中抛出异常

finally块中抛出的异常会覆盖本方法中抛出的异常

    public static void throwRuntimeException(){//运行时异常方法不用处理,即不抛出,不报错
        try{
            throw new RuntimeException("xx");
        }finally {
            throw new RuntimeException("finally_throwRuntimeException");
        }
    }
    public static void throwCheckedException(){//检查异常,需要程序去处理
        try{
            throw new CheckedException("xx");
        }catch (CheckedException e){
            throw new CheckedException("CheckedException");
        }finally{
            throw new RuntimeException("finally_throwCheckedException");//注释掉这块代码,catch块中checked异常会报错,
        }
    }

如下没有业务异常xx

java.lang.RuntimeException: finally_throwCheckedException
    at org.pentaho.di.trans.steps.elasticsearchbulk.util.Constants.throwCheckedException(Constants.java:129)
    at org.pentaho.di.trans.steps.elasticsearchbulk.util.Constants.main(Constants.java:134)
Exception in thread "main" java.lang.RuntimeException: finally_throwRuntimeException
    at org.pentaho.di.trans.steps.elasticsearchbulk.util.Constants.throwRuntimeException(Constants.java:120)
    at org.pentaho.di.trans.steps.elasticsearchbulk.util.Constants.main(Constants.java:138)

4、抛出异常时不要使用 e.printStackTrace();

应带上有用的上下文信息,注释

5、尽早捕获异常,传递异常发生时的上下文信息

6、捕获异常后注意对资源的清理

7、不要使用异常来控制程序流程

8、及早校验用户的输入


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 fulndon@qq.com

💰

×

Help us with donation