Java- 自定义异常

来源:互联网 发布:淘宝十大动漫周边店 编辑:程序博客网 时间:2024/06/11 14:49

创建用户自定义异常类

  • 创建用户自定义异常时
    1. 继承自Exception类或某个子类Exception类
    2. 定义属性和方法,或重载父类的方法

重抛异常及异常链接

  • 对于异常,不仅要进行捕获处理,有时候还需要将此异常进一步传递给调用者,以便于调用者也能感受到这种异常。这时可以在catch语句块或finally语句块中采取以下三种方式:
    1. 将当前捕获的异常再次抛出
      • throw e;
    2. 重新生成一个异常,并抛出,如
      • throw new Exception("some msg");
    3. 重新生成比并抛出一个新异常,该异常中包含了当前异常的信息,如
      • throw new Exception("some msg", e);
      • 可用e.getCause()来得到内部异常, 此时除了知道该信息外,还可以知道内部的原因,这种一层一层将异常链接起来的方式,称为异常的链接。
public class TheExceptionCause{    public static void main(String[] args) {        try{            BankATM.GetBalanceInfo(1234L);        }catch(Exception e){            System.out.println("something wrong: "+ e);            System.out.println("cause: " + e.getCause());            System.out.println("msg: " + e.getMessage());        }    }}class DataHouse{ // 数据库    // 抛出数据库方面的异常    public static void FindData(long ID) throws DataHouseException{        if(ID>0 && ID<1000)            System.out.println("id: " + ID);        else            throw new DataHouseException("cannot find the id");    }}class BankATM{    public static void GetBalanceInfo(long ID) throws MyAppException{        try{            DataHouse.FindData(ID);// 从数据库中查找数据        }catch(DataHouseException e){// 数据库中的异常            throw new MyAppException("invalid id", e);// 抛出应用层的异常        }    }}// 自定义DataHouseException异常类class DataHouseException extends Exception{    public DataHouseException(String msg){        super(msg);    }}class MyAppException extends Exception{    public MyAppException(String msg){        super(msg);    }    public MyAppException(String msg, Exception cause){        super(msg, cause);    }}-----------OUTPUT-----------  something wrong: MyAppException: invalid idcause: DataHouseException: cannot find the idmsg: invalid id
0 0