• 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语句块释放占用的资源。

  • 相关阅读:
    Java WEB 之页面间传递特殊字符
    c++ using Handle Class Pattern to accomplish implementation hiding
    c++ simple class template example: Stack
    c++ why can't class template hide its implementation in cpp file?
    c++ what happens when a constructor throws an exception and leaves the object in an inconsistent state?
    c++ 用namespace实现java的package的功能
    c++ virtual 和 pure virtual的区别
    c++ istream(ostream)是如何转换为bool的
    c++ 使用boost regex库 总结
    c++ 如何使用第三方的library
  • 原文地址:https://www.cnblogs.com/dodocie/p/7485596.html
Copyright © 2020-2023  润新知