嗨,你好,下面我们一起来学习自定义异常类。
那么我们自己要创建这些异常呢,
实际上我们就要继承自这个exception,当然也可能是exception 的某个子类,就是要总之说呢要继承exception类。
同时呢,我们可以定义一些属性,可以定义一些方法,也可以重载父类的方法,那就是自定义。
当然这些异常类呢,我们在使用的时候呢有一个通用的约定,就是我们对那个异常在处理- 的时候,
重抛异常以及异常的链接,它是个什么意思呢,我们说一下。
就是说我们需要把这个异常,比如说我们捕获 到一个底层的异常,那这个异常我们在写的时候呢,
在catch以后呢我们有几种处理机制, 一个是再次把这个抛出去,throw它,再把它抛出去。
第二个呢重新生成一个异常对象, throw
new一个异常,然后呢加一些,再加一些消息。
还有一种做法呢,在抛出这个新异常的时候,我们再把
当前这个异常,就是当前这个异常作为一个cause,作为原因,
作为它内部的一个原因,内部异常,把它抛出去,这种机制呢它是有个
好处的,为什么一个好处呢,别人拿到这个异常以后啊,就是catch到你这个异常以后呢,
它除了知道这个信息以外,它还可以知道内部的一个原因,
它可以用getCause来得到内部异常原因,当然这个异常它本身又是一个
可抛出的对象,所以它底层又有一个cause,所以我们就可以一层一层地得到这个内部-
的异常, 从而使得这个异常的这种处理和判断呢,
就更方便,也更合理,这种就相当于一层一层地链接起来,
有人把这个称为呢异常的链接。我们下面看一个例子呢, 它一个是自定了一些异常,另外呢这个异常的链接呢,通过这个
cause这样一个参数,把它封装起来。
好,请看这个例子。
这个例子呢我们假定有,是一个银行ATM系统, 然后呢去核对一些账户的余额信息,
账户余额信息,这里面是个帐号,那在这个过程当中我们 就可能发生一系列的异常,然后在这里面我们就可以呢
对这些异常进行处理。那在这里面
我们定义了,在底层呢它是一个DataHouse, 是数据的一个,数据的系统,我们可以说呢是
数据仓库或者数据屋子,那这个数据库里头呢我们假定在
这里面就去查找这个信息,那这里面呢它就可以抛出一个
数据库方面的异常throws,所以它就可以 抛出这种异常,这是底层其他的信息。那ATM机这个类,
ATM机这里面呢我们要得到这个余额信息呢,它就会到数据库里面去查找数据,
FindData,当然由于FindData以后呢,它对于这个数据库
的异常,数据库系统的异常呢我们这个e,这个异常呢throw一个new,
就抛出一个新的应用程序方面的异常,那么应用程序方面的异常呢,它说的说法呢
就不一样了,它可能就是说这是一个只是一个不合法的id,不合法的帐号,
同时把这个e呢作为参数,作为参数,然后呢传递给上一层调用,就作为cause,
作为原因放到这儿,所以这种机制是比较好的, 同时我们看到了用throws以及这儿throw。
好,这两个异常类的定义呢就是数据,
数据库的这个异常呢是继承了exception,继承了,然后我们
可以有一个构造方法,在这里面呢
应用程序的异常呢它也是继承了这个exception,然后它在这里面就
定义了一个构造方法,这个构造方法一个是带一个信息, 一个是呢把它内部原因然后作为参数,
这里注意我们调super,调super(message和cause), 它实际上就把这个参数作为原因,
放到这个对象里面了。