• JAVA: 自定义异常


    当java异常类库的异常种类不能满足需求,这时可以自定义异常。

    自定义异常必须继承异常类库中意思相近的异常,或者所有异常类型的基类 - Exception

    /*
    * 自定义异常
    * 自定义异常必须继承类库中意思相近的异常,或者所有异常的老大Exception。
    * */
    public class anotherException extends Exception {
      //可以自定义一个有参构造函数,继承父类Exception。不写的话,系统就会自动生成一个无参的构造函数
      public anotherException(String message){
      super(message);
      }
    }

    java中的异常链:

    把捕获的异常,包装成一个新的异常,在这个新异常里添加对原始异常的引用,再抛出新异常。看上去就像链式反应,一个导致另外一个。这就是异常链。

    public class RentalException {
        public static void main(String[] args){
            RentalException rtExp = new RentalException();
            try{
                rtExp.rentalException2();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public void rentalException1() throws anotherException{
            throw new anotherException("租金价格异常!");
        }
        public void rentalException2(){
            try {
                rentalException1();
            } catch (anotherException e) {
    //            e.printStackTrace();
                RuntimeException newExp = new RuntimeException("系统出错,请稍后重试啦");//这里可以传参数 e,下面的initCause()即可省略
                newExp.initCause(e);//包装异常,用于追查BUG(底层异常)
                throw newExp;
            }
        }
    }

    输出情况如下:

    java.lang.RuntimeException: 系统出错,请稍后重试啦
    at ind.lxm.CarRent.RentalException.rentalException2(RentalException.java:21)
    at ind.lxm.CarRent.RentalException.main(RentalException.java:7)
    Caused by: ind.lxm.CarRent.anotherException: 租金价格异常!
    at ind.lxm.CarRent.RentalException.rentalException1(RentalException.java:14)
    at ind.lxm.CarRent.RentalException.rentalException2(RentalException.java:18)
    ... 1 more

    关于异常的总结:

    1. 处理运行时异常,采用逻辑合理规避同时辅助 try - catch 处理。

    2. 多重catch 块后面,可以加一个 catch(Exception) 来处理可能会被遗漏的异常。

    3. 对于不确定的代码,也可以加上try - catch,处理潜在的异常。

    4. 尽量处理异常,切记只是简单的调用printStackTrace()去打印输出。

    5. 根据不同的业务需求和异常类型决定如何处理异常

    6. 尽量添加finally语句块释放占用的资源。

  • 相关阅读:
    Unit of Work
    OAuth做webapi认证
    Js数组
    UWP开发的一些思考
    表格行拖拽
    委托
    Git协作流程(转)
    全自动Web后门扫描(转)
    Gradle 2.0用户手册——总览(译)(转)
    面向对象之两大要领 (转)
  • 原文地址:https://www.cnblogs.com/dodocie/p/7485596.html
Copyright © 2020-2023  润新知