美文网首页
java优雅处理自定义异常

java优雅处理自定义异常

作者: flyingkid | 来源:发表于2019-08-21 20:06 被阅读0次
    自定义异常使用

    在java项目中, 一般使用自定义异常对程序做一些特殊处理。使用自定义异常的方式,能更清楚的表现出程序中的逻辑问题。 如何优雅的使用异常,就是一门学问了。

    本文采用枚举来处理自定义异常, 使用lombok生成get/set,以及构造方法

    1. 新建异常枚举类
    import lombok.AllArgsConstructor;
    
    /**
     * @ClassName: ExceptionEnum
     * @Description: TODO(异常枚举)
     * @Author: flyingkid
     * @Date: 2019-08-16 20:08:42
     */
    @AllArgsConstructor
    public enum ExceptionEnum {
    
        UNKNOWN_EXCEPTION("unknown_exception","未知异常"),
    
        SYSTEM_EXCEPTION("system_exception","系统异常"),
    
        PARAMETER_EXCEPTION("parameter_exception","参数异常");
    
    
        public final String code;
    
        public final String message;
    
    }
    
    1. 自定义异常类,继承RuntimeException
    import com.example.common.enums.ExceptionEnum;
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * @ClassName: ExampleException
     * @Description: TODO(自定义异常)
     * @Author: flyingkid
     * @Date: 2019-08-16 20:07:25
     */
    @Data
    @Slf4j
    public class ExampleException extends RuntimeException{
    
        private static final long serialVersionUID = -6979901566637669960L;
    
        private ExceptionEnum exceptionEnum;
    
        private String code;
    
        private String message;
    
    
        public ExampleException(String code,String message){
            super(message);
            this.code = code;
            this.message = message;
        }
    
        public ExampleException(ExceptionEnum exceptionEnum){
            super(exceptionEnum.message);
            this.exceptionEnum = exceptionEnum;
        }
    
    
        public ExampleException(String code,String message,Throwable throwable){
            super(message,throwable);
            this.code = code;
            this.message = message;
        }
    
        public ExampleException(ExceptionEnum exceptionEnum,Throwable throwable){
            super(exceptionEnum.message,throwable);
            this.exceptionEnum = exceptionEnum;
        }
    
    
        /**
         * @description TODO 重写Throwable中printStackTrace方法,打印异常信息
         * @return void
         * @date 2019/8/21 下午7:57
         * @author flyingkid
         */
        @Override
        public void printStackTrace(){
            if (exceptionEnum != null){
                log.info("异常代码: {}, 异常信息: {}",exceptionEnum.code,exceptionEnum.message);
                return;
            }
            log.info("异常代码: {}, 异常信息: {}",code,message);
        }
    
    }
    
    1. 使用
     public static void main(String[] args) {
            try {
                if (true){
                    //抛出异常
                    throw new ExampleException(ExceptionEnum.SYSTEM_EXCEPTION);
                }
            }catch (ExampleException e){
                //异常捕获
                e.printStackTrace();
            }
        }
    

    控制台打印

    19:36:10.678 [main] INFO com.example.common.exception.ExampleException - 异常代码: system_exception, 异常信息: 系统异常
    
    Process finished with exit code 0
    

    相关文章

      网友评论

          本文标题:java优雅处理自定义异常

          本文链接:https://www.haomeiwen.com/subject/tsxwsctx.html