本人微信公众号"aeolian"~

自定义Exception异常

自定义异常构建

首先写一个自定义异常,继承Exception,代码如下

public class NoMappingParamString extends Exception {
    /*无参构造函数*/
    public NoMappingParamString(){
        super();
    }
    
    //用详细信息指定一个异常
    public NoMappingParamString(String message){
        super(message);
    }
    
    //用指定的详细信息和原因构造一个新的异常
    public NoMappingParamString(String message, Throwable cause){
        super(message,cause);
    }
    
    //用指定原因构造一个新的异常
    public NoMappingParamString(Throwable cause) {
        super(cause);
    }
}

使用自定义异常

如果自定义异常是为了提示,一定要用try..catch,不要直接用throw往外抛。这样只能被框架捕获。

    /*结果resultType字段set方法*/
    public void setResultType(String resultType) {
        this.resultType = resultType == null ? null : resultType.trim();  //resultType结果封装
        
        //自定义一个resultTypeString字段,用来根据resultType的值(1,2,3)自动生成对应的文本
        /*这样写的好处是集中管理,后台代码中只在此处管理,不好的地方是运营时突然加一个值就会返回未知类型,要更新要把后端重新编译发布,也就意味着要重启(把值传给前端让前端判断是不用重启的)。这种方案只适用于类型固定的字段*/
        if (resultType!=null) {
            int rt = Integer.parseInt(resultType);   //将flag转换为int值
            switch (rt) {  //判断属于那种类型,就给resultTypeString赋予对应的值
            case 1:
                resultTypeString ="未处理";
                break;
            case 2:
                resultTypeString ="自动解除";
                break;
            case 3:
                resultTypeString ="已解除";
                break;
            default:
                resultTypeString = "未知类型";
                /*这里一定要try catch异常,因为这是set方法,throw出去大部分情况是被框架获取*/
                try {   
                    /*实例化自定义异常*/
                    NoMappingParamString exception = new NoMappingParamString("resultType类型未完善"+"未知resultType:"+resultType);
                    /*抛出异常*/
                    throw exception;
                } catch (NoMappingParamString e) { //捕获异常
                    System.err.println("异常信息:"+e.getMessage());  //获取异常信息,就是上面传的message
                    e.printStackTrace();  //把栈信息打印出来
                }
                break;
            }
        }else {
            resultTypeString = "";  //如果flag为null返回为空
        }
    }

仅仅为了提示,又不想自定义一个Exception,可以用RuntimeException。这个可以抛出异常,并准确定位,缺点是不能处理这个异常自定义异常的话可以捕获并且处理

public Queue(int initialSize) {
        if (initialSize >= 0) {
            this.maxSize = initialSize;
            data = new Object[initialSize];
        }else {
            throw new RuntimeException("初始化大小不能小于0:"+initialSize);
        }
    }

 

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *