00:00
行,那通过这个例子呢,其实咱们就可以说刚才的一句话了,就是咱们呢,怎么去选择用throws还是用track family,其实刚才呢,就说了其中的一种情况。开发中如何选择使用try catch finally,哎,还是使用Rose,哎,那如何选择呢?咱们刚才其实已经说了一个点了,什么点啊,对,就是你负类中被重写的方法就没有抛异常,那你此类重写的方法呢,如果要有异常了,你是不是只能用拆开在这里啊,哎,这我们写一下说,嗯,如果这个负类中被重写的这个方法没有抛出异常啊,没有抛,没有没有Rose吧,我们这样说啊,Rose这种方式处理异常。
01:03
处理异常,哎则子类重写的方法,重写的方法啊,也不能够使用Rose,哎不能使用死手死,那就意味着意味着啊,就是如果这个子类重写的方法中有异常,诶有异常那就必须呢,诶去使用try catch finally这个方式呢,去进行处理,哎方式上去处理这种情况呢,咱们后边呢会看到的,后边呢,咱们讲多线程的时候呢,咱们这个在副类里边就会有一个run方法,这个run方法呢,人家就没有抛异常,那回到咱们自己这个子类里边呢,咱们要重启一下run,诶恰好里边呢还真有异常,那这有异常的时候呢,你这时候呢,没得挑,只能是用这个try catch family就绝对是不可以用throw的,哎,就是因为人家负类这个方法就没有抛,哎,这是一个原因啊,那。
02:04
除了这样的一个经验之外呢,我们看还有没有其他的一些经验。基于什么点呢?基于咱们说过了,说TRY开find,相当于真正把这异常给处理掉了,而我们这个Rose的方式呢,它其实根本上没有去处理这个异常,只是呢向上抛了,哎这样的情况。那么开发当中我们到底怎么处理呢?开发中我们可能常常看到这样的情况,就大家的这个经验应该还没有啊,所以我就直接来说了,比如我们这呢,是一个没方法,或者你是一个其他的方法,这个方法里面我们又调了其他的几个方法,假设呢,我这有三个方法。就是顺序呢,去调这三个方法,好,这三个方法的话呢,我们是在这边声明好的,在这呢,只是调了一下各自这个结构啊,那如果说这三个方法在这调的时候呢,它们是一种递进的关系。什么叫递进的关系呢?比如说呢,我们得通过这个方法呢,得出来的一些结论,这个结论呢,作为参数呢,又让这个方法去用这个方法得出来这个数据的话呢,又得被这个方法的参数去用一下,这叫这种递进的关系了,行,那恰好的话呢,这三个方法呢,还都有可能会出异常,那么这时候呢,你考虑一下这个出异常,这个出异常,这个出异常,这三个方法我们怎么去处理。
03:22
对,这个时候呢,咱们通常呢,会选择说这三个方法呢,你先不要在这里边去throw,呃,去TRY开family了,诶最好呢是你们呢都去Rose,然后呢,在我们这个没方法,或者你另外的一个方法里边,让他们先后执行的时候呢,这三个往这一放,你可能会抛出来这个Rose,这就在这块会打叉了,就啊那这个时候呢,咱们整体上给它做一个try catch,嗯,那为什么要这样的去处理呢?对,就是这块呢,先不用整那么复杂,然后结合到一起好处理啊,这呢也是一个思路啊,或者更主要的原因是什么呢。
04:06
就是这里边呢,你别去拆开,为啥呢,你这要拆开了,我回头要这调的时候呢,是不是这异常就给处理掉了,处理掉了意味这个代码是不是就可以往后走了,但事实上呢,你这里边都出异常了,是不是你得到的这个数,有可能这个二也用不了啊。你想想对吧,咱们是保证你这个方法一,你正常的能够执行的时候呢,我们拿到这个数据呢,我二才能够去用,它是递进的这个关系了,你要在这个一的时候呢,已经会出,已经出现一些异常了,你拆开是给处理掉了,那可能这个数据呢,我要要的就没有拿到,你再让这个走下边儿,其实也没有意义了。所以说呢,咱们建议呢,你们就先都Rose在这里边执行的时候呢,万一你这个要真的执行出现异常了,这个我拆开直接让你这块就蹦到catch里边,后边这个呢,就不要执行了,因为也没有意义了。能体会一下这个过程吗?
05:00
就是这个咱们现在说的这的你去Rose啊,不建不建议呢,你在里边去拆catchche的原因啊,你处理拆开始完了以后,这不处理完了,处理完了你这块呢,还往往下走,下边其实也走不动了,就没有必要再往下走了,哎这样行把这个呢,我们写一下啊说呢,比如说这个执行的这个方法中啊,这个先后又啊,先后又调用了另外的几个方法,那这几个方法是这种递进关系,哎是递进关系执行的,那么我们建议这个这几个方法使用roses的方式进行处理。哎,是用ROS的方式进行处理,而我们这个,呃,执行的方法A吧,而执行的方法A方法A,哎我们说呢,可以考虑呢,使用拆开进行处理。
06:04
哎,Try catch finally哎,方式进行处理行这呢属于咱们讲的一个经验之谈啊,大家呢,后续呢,在处理的时候呢,诶你可以考虑考虑这样的一个方面啊,刚才那会呢,这个有同学问说,嗯,老师,我们要处理异常的话呢,我能不能说在里边check开,我也用Rose也用啊。双重保障是吧,嗯还有嗯,比比如说比如说就是这个吧,方法三这个MA2往这一放,我给拆开了,说我这块呢再收一下,对从语法上可以吧,语法上的话呢,这肯定可以啊,你愿意写你就写上呗,是吧,你写上直播呢,就在这块出点事呗。是吧,本身里边其实啥事没有,你非得写个他,你写个他,你这块你就得考虑处理,你得负责是吧?啊就是本身呢,你这个人其实病已经治好了,你非得往上往上级医院报一下,你说这个人有病,其实没有病了,都治好了,你上级医院那也得看一下,那有病来处理一下吧,是吧,那你就得抛出这个情况了,从医法上呢是可以了,但事实上呢,你拆开都已经把病治好了,你Rose也没有意义了,所以只用呢,选择一种方式就可以了啊,你看你到底是想Rose呢,还是想try catch呢,选一个哎就行啊,不用两个都去处理。
07:33
行,那么讲到这儿的话呢,咱们关于异常处理的两种方式呢,就讲完了,这是咱们这一章的最重要的核心内容,哎,就这两种方式,行,那简单总结几句啊,到目前为止,那如果我问一个问题,咱们要是写代码的时候。这个都没打叉,这边没有叉啊,不意味着这个程序没有异常,对吧?哎,那就可能会有运行式异常,那这时候呢,没打叉了,可能会有运行式异常,我就不处理了,可以吧,可以,运行式异常呢,就不用处理了,好,那这时候呢,我点右键1RUN,就咔这块报了一个比如控制帧,那你说报控制帧以后,你接下来要做什么事呢?你是回过来写track开呢,还是回过来去把那个错误信息给改了呢?对,肯定给改代码嘛,是吧?嗯,改代码你别过去写这个try cash是说啊异常给处理了,它处理的指的是出现问题以后,我们想怎么去展现,举个实际情况啊,就比如说大家呢,用这个手机举个例子,比如这块有个按钮,你一点,那按钮本身呢,应该出来另外的一个界面的结果呢,一点那按钮呢,这个里边的代码呢,可能出来一个控制的异常这块呢,直接的就闪退了,或者假设没有闪退,直接呢出来一堆这个乱码。
08:51
这呢属于咱们没有处理,呃,让用户看到这个乱码了,说不好,所以我们呢说呃既然你这块呢有可能出问题,那有那我们呢怎么办呢,我加一个check catch就是一旦呢,你要出现这个这个这个异常的时候呢,我们诶出一个出一个什么呢,出一个这个这个对话框,对话框呢上面写说亲不要着急,这个我们的后台工程师马上会修复哦是吧,哎这就相当于你出现异常了,我们给拆开了处理了,诶报了这样的框,哎用户一看说嗯还可以是吧,诶他这就关掉了,关掉了过了一会儿呢,他又进来了,他再一点又处理个问题了,你不能说诶我都给你处理掉了,你怎么还报,你怎么还还还还需要这个这个我去管呢,就是我们只是相当于把这个呢,给用户一个友好的方式呈现了,哎,当你出现这个确实出现问题了,我们友好的方式呈现了,其实你这个错误信息呢,通常的话呢,我们也会发到后台上,后台呢专门去记录一下不同的用户什么机型的是吧,诶出现什么样这个bug了。
09:52
你得看一下这个问题还是需要你去修复的,咱们的目的呢,是希望用户点那个按钮出来这个界面,而不是说点那个按钮出来一个友好的提示啊对,就是呃,咱们呢,相当于你拆开时啊,我处理啊,咱们其实主要处理那些编译是异常,处理完以后的话呢,如果真出现异常了,你还是过来得改代码,哎,这个是一个主要的事儿啊,只是说呢,咱们现在讲的try cash也好,Throws也好,是说呢,这个代码呢,在执行之前它可能会出现问题,我们提前呢做一个预案,就是万一他要出现问题了,我们怎么办,你就别报乱码了,说诶提一个有友好的一个框,哎,那真出现异常了,提示有好框了,但同时你要记得呢,回去该改代码还得改,哎,是这个意思啊,行,那这关于异常的两种方式,我们就说啊。
我来说两句