自定义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); 
        } 
    }

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/17806.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论