00:00
这张呢,咱们还差最后一个问题,看一下我们这个PPT,最后一个问题呢,说用户自定义异常类,用户自定异常类咱们到目前为止说过这样的几个事儿了,首先呢,第一个问题咱们还回到这个目录这个层面吧,说呢有很多常见的异常,咱们呢先看了看有哪些异常,这些的异常体系结构中的这异常都是咱们已经提前写好的。就是API呢,给我们提供好的,然后呢,说有异常了,咱们得处理,这是咱们讲的重心,两种方式处理了,处理完以后呢,回过去说了一下,说这个处理呢是第二个过程,那处理之前呢,你得现有异常,然后你才处理,这呢是有两种方法,那么我们这个第五个这个点呢,说的是呢,就是关于这个异常对象的生成,说除了你自动生成之外呢,我们还可以自己呢去。这是他说的这个事,但是这时候肉后边呢,咱们加的这个对象是一个异常类型的对象,又了一个runtime exception又了一个,呃,Exception这个righttime exception和exception呢,都是咱们提前API都提供好的,那现在说我们可不可以自己去定义个异常,异常类型说呢也可以。
01:11
那你必要的时候呢,你可以使用你自己自定义的这个异常类也行啊这呢就是咱们最后一个点要说的问题,那如何呢,去自定义一场类,好,那咱们呢就直接来这儿说了,比如说我在这个下边呢,咱们去自定义一个,自定义一个的话呢,那我这呢就起个名字了。这个实际开发当中,你根据你这个异常,你到底是想干什么,你去自己呢起个名字,比如呢,像像这个咱们说的这个index啊,AuTo Bos这个我怎么选了一个最长的呢,是吧,AuTo Bos我选个也挺长的啊,就是这个index auTo Bos exception它呢是继承于这个叫run。在起了又index out of bos这样是吧,Exception啊,它呢,继承于咱们叫runtime exception这个回头呢,你自己拗的时候,我拗个它,你一看名你就知道它是什么意思了,咱们开发当中呢,你也可以起名字的时候呢,你写个有意义的,哎写个有意义的,然后呢,你根据这个有意义的这个你就知道哦,是不可以这样子的,哎就就这样个情况啊。
02:19
嗯,那这块呢,我就呃先不去写这个事儿了,咱们只是做一个普通的一个练习说明,不妨呢,我这就叫个my exception了,好,这叫my exception,然后我说这是一个自定义常类啊,那你也有点不信,说你凭啥说你叫异常类呢,你又没有任何的特征。对吧,嗯,就是你说你是个什么,你得跟人家能搭上边儿啊,比如说你是个人。你现在说他是人,他也不可能,那我就让你去extend person,诶他是不是就是个人了,我让你继承人,他是不是就是人了,嗯,对吧,对,我现在想让你是个异常,你是不是就继承现有的异常体系,你就是个异常了,对咱们说继承关系不就是衡量的,说谁is a什么嘛,你想让你这边呢是一个异常,你这块呢,就让它负类是个异常就可以了,行,所以说呢,我们怎么去自定义这个异常类呢?通常呢,我们一定会让它去继承于现有的这个异常结构的,那通常都继承谁呢?也是就选择两一个呢,你是一个叫runtime啊exception,对,那你要么呢就是继承exception了,它俩的区别呢,就是你这个是运行时的异常是吧?啊那个的话呢,就是编译时候呢,就就得考虑处理的一个异常啊,区别呢就在这儿啊,所以这儿我们先写一下叫如何自。
03:45
定义啊异常类,首先第一步,那需要我们这个定义的这个类呢,去继承于现有的异常结构啊这个异常结构,那现在的这异常结构呢,主要呢就是两个,要么呢,我们去继承一叫runtime exception,哎,或者的话呢,去继承于这个exception,那区别呢,刚才说了就是一个叫运行时异常,那就是可以考虑呢,不用显示的去处理了,对后边这个呢,你就得必须显示的,得考虑怎么处理一下啊,这是第一个问题,然后第二问题还怎么办呢?还怎么办呢?还怎么办,你看看它怎么办的,你这个runtime exception它其实也是集成于exception的啊,只不过它比较特别了,是运行时了,那你看它是怎么定义的,你就也仿照着怎么定义就可以了,一上来看,哎哟,这哥们定义了一个,这个叫zero wash u ID。
04:42
哎,然后呢,你看这个seven里边它也有一个好像有点意思哈,这个那我们也抄一下,哎,这个这不就是模仿嘛,是吧?啊,这个咱们国家造这个发动机呢,刚开始也是你看诶不知道他这干什么了,但是它这个东西呢,发现我也能造,那我就也造出来一个也安上去再说,哎,就这种啊,那我们就也先放上去。
05:04
嗯,等一下我们去解释,然后呢,我们再看一看构造器,一个构造器,又一个构造器,还有一个写了好多构造器,那是不是也抄一下啊,我们也得写几个构造器啊,Public写一个空参的CTRLCTRLV这一种,然后呢,Public写一个代餐的,代餐的呢,通常你要带呢,一般的我们这个message都会带上。啊,这个message呢,就是还是相当于咱们那个get message获取到的,但是你现在这个message呢,你不是在你自己这定义的属性,是人家父类里有的,所以你直接呢对做一个关于父类的一个调用就可以了。哎,其他的还有还有的话呢,一般呢,我们就不提供了,一般呢写两个这个就行了,哎就行了,别的呢,其实后边你看就也没啥了,就全是构造器了,哎那就回来,那如何去自定义异常类呢,也就这么三个情况啊三步,第一步呢,你继承现有的体系结构,第二个呢,我们去提供什么呢?诶提供一个叫zero version u ID。
06:10
这样的一个叫序列号。哎,提供这个还是一个全局常量,那么这个zero version uidd是什么呢?啊,这个呢,我们说首先它是一个static的表示,它是跟我们这个类算是共存的啊,啊是共存的了,就是我们这个类加载它就加载,而且就一份,你可以理解为呢,它是对我们这个类的一个标识啊,我这个呢,用的人家这个runtime的,你你换一换,随便你写一个long型的一个数就行。哎,这个数呢,现当于唯一的标识,我们这个my exception这个类,这干什么用的呢?现在先不去详细的介绍,咱们后边讲IO流的时候会说,就是当我们呢,对这个数据可以进行序列化,序列化的时候呢,比如说它举给大家举个简单例子啊,比如我这呢,是我自己的电脑,然后我通过网络的方式呢,我把这个数据呢,就传到这了,这个数据传的是什么呢?我传了个对象,也就说诶这很神奇,确实很神奇,我们内存中的这个对象呢,是可以通过网络的方式传给另外一个结构的,那你这这个对象我传过来以后呢,这就是一个对象,对,这叫序列化机制啊,那你在这里边呢,我们是一个person一个类,然后在这也是个PERSON1类,它得识别你这个person类和这个person类得是一个类,所以呢,我们到时候呢,会给这个类呢,也会加一个叫序列号,这一类的序列号表示呢,就是都是person,咱们那是同一个序列号的那个person类。
07:36
啊,那么你这里边方法呢,可能会抛异常,那异常也是一样,如果你是自定类异常,你这里边儿呢,用到了一个叫my exception,在这里边呢,也得有一个叫my exception,咱俩my exception得是同一个序列号的那个my exception。就这时候呢,你不能通过这个名去说名一样就行了,那不可以,有可能这个my exception跟这个my exception可能不一样,怎么证明一样不一样,咱们就看看咱们这个号一样不一样。
08:02
诶这呢,就提供了就是这个叫序列的版本号,去标识咱们这个类的。就这个意思,后边呢,咱们讲到IO流的对象流的时候呢,会说这个问题啊,其实要说呢,也是刚才提的这两个点,只不过呢,大家理解的可能更清楚一些而已啊,然后下边的话,我们会提供提供几个叫重载的构造器。提供这个重载的构造器,嗯,一般呢,就是你根据需要,你看你想这个造哪个类的对象,你就造哪个类的对象就可以了,行,这呢叫自定义异常类了,那定义完以后呢,我们肯定是要用,不用的话你造它也没有意义了,那比如说咱们回到这个student这个测试,这咱们就可以不去throw它了,诶我们呢,可以去一下,叫new my exception。这个位置呢,你可以写一下,说我们换句话吧,换句话啊说不能输入负数。那你要是这个异常确实就想在这用在项目当中,不妨呢,你这个名字呢,就写成个叫复数exception是吧?哎,这叫复数exception哎就一看就知道啊,这个输的是个复数的意思啊就行好,那这样的话呢,咱们就抛了一个他抛了一个他咱们现在的这个my exception呢,我是继承运行时的了,其实呢,你在这块呢,是不是也可以考虑就不写这个了。
09:24
因为有这个运行时的嘛。嗯,但是呢,你要这个位置,你写的是一个exception啊,保存一下,那你这块呢。哎,回过来这是不是就一定得去给他处理一下了是吧。哎,处理的话呢,我要这样点,它生成的就是当因为你这抛的是my exception,就写except,你也可以写它的负类。那这就OK了,那这呢我就抛了,假设呢,你要输入的确实是个负数,在这块呢,你就用了个它这呢还能够以复列的方式抛出去,这块我们就给处理了,显示一下它的message,这个message呢,就还是你当初的这个message,因为里边呢咱们用的super。
10:03
哎,这个逻辑,这个就是咱们整个面向对象里边的这个情况了,然后执行,哎,就是不能输入负数。行,这呢就是咱们说的叫自定义一个异常类,并且呢,还用了用啊这个一定要小心,这呢我们需要继承为现有的异常体系,就是你这呢,有的它虽然是个对象,但是呢,你是一个异常类的对象,别的对象可不行啊,你不能说诶我能不能一个string。有个string,这里边儿我也写一个,说不能输入这个负数,这行吗。这是不可以的,这个string呢,它可没有继承于这个我们说的这个异常的这个体系啊,这个string的话呢,它不是一个异常类。这个CTRLT。CTRLT,哎,它的负类呢是object,就是它不是异常体系的,只有异常体系的这个对象呢,才可以去肉,其他的这个对象呢,都不能死肉,所以这呢一定要注意,这是错误的。
11:08
那我们必须呢去去抛一个异常类的一个对象才可以。好,那么关于我们整个异常这块的内容呢,我们就讲完了,就哎就这样的几个知识点。啊,回到最初就这几个事儿,这几个事儿里边最重要的就是我们三和四,哎,三和四后边呢要用,有的时候我们会用一下它。嗯,再有的时候呢,可能需要就是具体指明说我就得是个什么样的异常,那你也可以自定义一个啊,就仅此而已,出现的频率呢,会少一些啊。
我来说两句