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

原文地址:https://www.cnblogs.com/dodocie/p/7485596.html