00:00
接着呢,咱们来看一下这个下一道题,这道题的话呢,看着稍微大一些,那可以说呢,把咱们这一章要讲的这几个知识点呢,就全融融合起来了,就基本上就都涉及到了,那这呢,我们就一起呢来写一下,首先写这个程序呢,它叫做这个名,那我们呢也命名这样一个名字,这是一道练习题,这呢我就新建一个包来写这个练习。EXDR,新建这样一个class CR v finish,好,然后这里边呢,需要做什么,整个呢,我们把它就粘过来,在咱们代码当中呢,这个去看一下行这块呢,我就整个呢就粘过来了啊,这样放大一下啊好,这里边呢说我编辑这样一个程序,说接收呢命令行的两个参数。注意是命令行的两个参数,就是咱们呢,讲这个main方法的时候呢,这不是说过吗?就从这儿接收,嗯,接收呢这个事儿啊,这个命令行的两个参数要求呢,不能输入负数,这呢是一个要求,如果你要输入负数的话呢,它下边让你抛异常了,说计算一下两数相除,那我们在这个使用从这个main方法这获取这个参数的时候呢,咱们会涉及到一些可能出现的异常,比如说呢,叫数据类型不一致,Number form me exception。
01:23
咱这是做的两个数相除,咱们看到的是个string,你得相,相当于你得把这个string呢,转换成这个in的类型,在转的过程当中,这不就出现它了吗?然后呢,缺少命令行参数,我们呢,这是两个数相除,我需要用到的X0和X1,假设你就写了一个或者一个也没写,这不就报这样的错误了,然后呢,叫除零啊,你写的这个分母是零了,这是这个问题,然后呢,输入这个数是个负数,负数这个事的话呢,本身咱们没有在API里边提过这样的这个这个现成的一些异常了,那你现在这个题目要求说输入复数是不行的,这呢,我们把这个事呢,诶做成了一个自定义的异常,哎,相当于自定义个异常类,叫做它进行处理,然后在这个主类当中,这不就是这个主类嘛,哎,说呢,去定义一个异常的方法,就是我们写了个方法,这个方法呢,完成两数相除,相当于咱们在这个呃,这个类当中写了一个方法叫public,诶public,呃,完成两数相除的功能。
02:23
咱们也可以把它呢返回一下是吧,那int类型的我们叫ecm,在这里边int一个I,哎,然后呢,T一个阶,哎让这两个数呢,去做一个相除,那么下边呢,就是说去做这个异常的一个处理了等等行就是这样一个情况,那我们需要对这两个数进行一个相除,除的时候呢,这不是说你不能一上来就直接return一下I去除以阶了啊。咱们这边要求说这两个数呢,是不能为负数的,所以呢,你在这个之前呢,先判断一下,说如果这个I呢,要是小于零的,或者这个阶呢,也是一个小于零的,那此时的话呢,我们得让它抛出一个异常,这个异常呢还是咱们自定义的一个异常。
03:06
诶,自定义个异常,那这块呢,咱们还得去定义一个啊这个名字呢,都给你写好了,叫呃这个ec def ctrl c。嗯,CTRLV,呃,是这样的一个结构,然后让它呢,我们去继承现有的一个异常体系,这呢就涉及到如何呢去自定异常类,这呢我写那个exception吧,比如说啊比较大了,然后这里边我们要想完成这个自定义长类有三个点,嗯,自定义厂里啊,第一个呢,就是你得继承现有的异常体系结构,第二的话呢,得提供一个这个序列的版本号。哎,这个呢,我们就粘过来一个这个你把这个数改一改,这是成为它自己一个独立的一个号就行,然后第三个呢,就提供这个重载的构造7DCDEF这呢是一个空仓的了,哎,这呢我们写一个string类型的,写一个message,哎,Super一下。
04:14
好,Ctrl shift f这呢,就我们叫自定义的异常类,写完了,写完以后回过回过来,如果呢,I小于零或者是接小于零,我们这呢,就给你去死肉妞一个啊ECDEF,然后在这里边我们写个信息,说呢这个分子或分母为负数了,可以这样。分子或分母为负数了,这就相当于这个异常的一个信息了,咱们就给死入了,那除此之外呢,我们在这呢,你就return一下这个I呢,去出一个接啊,那这呢,因为你抛出来了一个叫非运行式的异常,我们就得考虑去处理,咱们在这呢做一个诶Rose,这是异常的一个处理。
05:00
这样行,那这个方法呢,写完了,写完以后的话呢,我在这个没方法里边呢,得调用一下,那要么呢你得造个对象,要么呢,不妨我就现在先死在这得了,好,那这呢,我们就直接呢叫AECM去调,那调的话呢,你得传过来一个I和街的实体的值,哎,那这时候呢,我们涉及到就得拿这个形参这个去处理,那ox的话呢,我们直接呢往里放肯定不行,因为人家是死针形,你这是个in的形,所以我们上来呢,先来一个转换,看转换,转换,那就得这样转了啊,拿着这个integer第2PASS in这样子一下。哎,然后CTRL1得了number,这个呢,我们就叫L了,诶这个我们叫一个I啊,然后接着的话呢,我们还得去获取一个做分母的,这叫一叫接,那这就获取了,然后这样一除,我们就得到一个结果,哎,得到个结果,然后这个结果呢,咱们可以去输出一下,这个叫一个result,哎,保存一下好,那么这块呢,出问题是因为咱们这呢抛出来了一个异常,而这个异常的话呢,又是一个非运行时异常,那此时的话呢,就需要我们显示的去处理,那上边呢,在我们这个位置呢,实际上也可能会出现异常。
06:25
只不过呢,这属于这个叫运行时异常,所以呢这块呢,它就没有打叉了,按正常来讲的话呢,这个运行时异常呢,咱们可以不处理的,在这个题面说了,说还是让咱们去处理一下了,哎处理一下,那这块处理呢,咱们就处理一下,咱就可以把整个呢这段代码就全都包住,哎全给它包住这个当然我可以直接就点一下那个封起来这样点啊,但这块呢,我就不直接点了,咱们直接还是现写一下,诶大家熟了以后呢,直接包起来以后,直接点就完了啊,那包起来完了以后,我们这儿呢,说可能会出现好几种类型的异常,我们就一个一个呢进行一个处理,那比如说呢,就按照从下往上,从上下往下的这个顺序,那这个位置的话呢,说可能会转换出问题,对,就这个number form me exception。
07:13
哎,这是个E,这里边呢,我们就不去打印这个print sta了,咱就显示的写一下叫数据类型不一致。这是一个,然后再来一个开始,还可能叫缺少命令行参数。这里面呢,我们要用一下二零和一,你要是写了一个少一个,或者是俩都没写,它就会报这样的这个异常。缺少命令行参数CTRLC。这是这个,然后呢,有可能你这个分母呢还是个零,这呢我们叫算数异常。
08:00
这个我们在这前面这样写上,叫除零。来CTRL一下,好,这呢是咱们说的这呃三种情况,那还有一种呢,就是咱们自定义的这个,你这还没处理呢,这还报着错呢,诶我们再去catch一下,这个呢,出的是这样的一种异常。哎,这个呢,我们这块呢,你到时也可以说我直接去这个写写这个话,但是实际上你这块已经写了,写了我这就没必要再去写了,我这一点get一个message,那就是获取这个message就可以了,行,那这样的话呢,咱们现在就把这个异常呢,就都处理完了,如果说呢,没有出现异常那最好了,那没有出现异常了,那就正常的能够出来这个结果出现了,出现了是哪一种,我就进行哪一种的处理,哎是这样个情况,好这呢咱们就写完了,这呢,因为涉及到从那个没方法这块去获取这个命令行参数的值了,我就不拿这个命令行去演示了,咱们直接就在这块演示,这呢,我就先让他先这样跑一下啊,来先跑一下,这样跑的话呢,自然而然的,相当于他就去执行了,咱们一个也没写,是不是就崩成这个了。
09:07
哎,相当于就执行这个a death auTo Bo了啊好,那这块呢,我们在这个点一下,下边叫run configurations,在这个位置呢,咱们考虑这个参数,比如说想让他报第一个问题说number format exception。是不是就写个数,然后写个ABC啥的,哎,就OK了,然后。哎,数据类型不一致,那就是它下一个需要命令行参数,咱们刚才其实已经演示过了,你可以再来一下,这呢我就写个12,后边呢就不要了。看是哎缺少命令行参数,那我要是写三个呢,会有错,呃会会有异常吗?对,那就读两个呗,就不会有异常了,就啊行,然后呢叫要除零,我这呢,后边一个充当的是分母,哎,就出零了。哎,这呢是咱们这个自动生成的异常,对异常对象,下边这个呢,是咱们自定义的。
10:05
C我这块呢,我改成一个叫诶负二。有一个呢,是负数了是吧,就分子或分母了为负数了。行,那这个题目的话呢,就是做完了,这里边呢,你看蕴含的知识啊,首先呢,常见的一个异常类型,这个是我们关注的点,第二个呢,异常的处理try catch有了,肉呢也有了,那下一个呢,关于说叫手动抛出一个异常对象,我们也手动抛了,那自定义个异常类呢,我们也自定义过啊,这里边包含的这个知识信息呢,就比较多啊,真实要开发中呢,倒是也不会说,不会说呢,非得这么复杂,什么都有啊,更多的呢,还是拆开和Rose。诶,这是我们使用频率最高的,更多的关注于如何去处理本身已经有异常的这些代码,好,那这个题目呢,咱们就结束。
我来说两句