00:00
行,常见异常结束以后,我们再回到最初,这这个问题呢就说完了,下边呢,我们来考虑异常呢该如何进行处理,这呢提到了处理的两种方式,一种呢叫try catch finally,一种呢叫做Rose,这两种方式呢,在我们开发当中都比较常用,需要大家都得掌握,这也是咱们这一章的重心,这个这下边儿呢,这都算是主要讲的内容了,这里边的重心呢,就是我们的三和四,这是我们的中心,行,那么我们就先来看一下这个异常处理的第一种方式叫try catch finally。来看一下这个问题,首先呢,这里边有两段话,我们呢引入一下,说到咱们在编写程序的时候啊,经常呢,这个要在可能出现错误的地方呢,加上一些检测性的代码,比如说呢,咱们用X除以Y了,这时候呢,你需要检测这个分母是不是V0,你要为零,咱们说了会抛一个这个算数异常。嗯,这个数据包括呢,后边说是不是为空,你像这个先判一下是不是闹,如果你要闹的话呢,就别让这个闹的这个变量你去点属性方法了,因为点肯定控制帧了,对,但是这个时候呢,你去想,如果我们一写代码啊,我担心它控制帧,我担心它是零,我们前面呢,是不是就得去加一些if else的一些结构了,那最后呢,会导致我们这个代码呢,会显得比较臃臃肿,就是你这个程序里边这个为了呢考虑说这个异常呢,不让它出现,你里边呢就if,如果你要是这样啊,我就不怎么着了啊,那样怎么着,就是这里边儿呢,你会加入大量的这个if else这样的一些结构,这个呢显得就可读性很差。
01:41
可塑性很差,那怎么办呢?比如Java呢,就采取了它的一种处理的异常的方式,就是把呢这个比如说这是一块代码了啊,这块代代码里边呢,就这些代码呢,说可能会有异常,这些代码呢,没有问题,没有问题呢,就还这样放着,有问题呢,咱们也不是说加这个if,把这个打成好多分支啊,去规避这样的一场,不是这样子的,而是呢,把它看成一个整体,我们呢,就把这个整体呢,拿一个类似于大括号的东西呢,给你先封起来,表示呢,你这块呢,是可能会出现异常的东这些代码。
02:14
就跟说这个生病的人给他隔离起来一样,没问题的,这些人呢,你还正常,不用隔离,这个呢,就给他大括号隔离起来,隔离起来以后呢,我们呢,诶就是你要考虑第一种处理呢,就是加个TRY,就把它呢试执行一下,一旦执行发现出现异常了,我们下面呢就进行处理,里边呢不去加这个if else啊,要不可读性就太差了啊,这呢就提到了我们这个异常呢,进行这个处理的机制,就是把这个有异常的这个代码,或者可能出现异常的代码和正常的代码呢区分开,是我们这个程序的简洁优雅与维护。啊,具体来讲怎么去处理这呢?我放了一个图,哎,先看先别看图,先看,这就是异常处理呢,我们刚才也提到了,有两种方式,Check catch finally和throws,那么这两种方式有什么区别,区别呢?肯定不是说只有仨关键字,这就一个关键字啊,这个本质上这俩有什么区别呢?诶,我想到一个特别好的解释,这个事儿,就是拿这个狼来了这个故事呢来说明,当然跟这个故事呢也是有点区别哈,就是在它的基础上我们稍微调整一下。
03:18
这个故事小时候是不是都听过啊,对,这个一般父母都给讲啊,父母都给讲的原因呢,不是说他是希望你诚实,是因为这个上一代人都给他讲是吧,可以往下传,就这样去讲啊,这个故事呢,当然呢,教会我们就要学会诚实,别说谎啊。呃,在这个故事的话呢,不用再给大家去服述了,这里边呢,就是这个这个小孩在这放羊,这个放羊的这个羊正常在这吃草,平安无事,什么也没有,没事儿,这个呢,咱们就可以理解为这个程序呢,是正常执行的,什么事也没有,嗯,那这个狼呢,突然出现了这个狼呢,大家就可以看作是一个异常,异于常理,本身不应该出现狼的结果出现了,那这个时候呢,这个小孩看着这个狼,这个狼呢,看着这个小孩就得想怎么处理,这就像我们现在呢,一场出现了,怎么处理,处理呢?说有两种方式,第一种叫try catch finally啊,Track finally是什么意思呢?就这个小孩一看这个狼呢,还是首次出来,是个嫩的是吧?
04:19
啊,他一看他自己呢,就有能力解决,哎,他自己拿起一个石头咔咔扔两下,这个狼呢就吓跑了,或者给打死了,哎,这就相当于第一种方式就出现了这个异常呢,他直接呢,自己有能力去处理,直接就干掉了,干掉以后这个羊呢,该吃草还吃草,就是平安无事,就正常去执行。哎,这是我们说的第一种情况,他自己呢给解决掉了,那么第二种呢,叫做Rose,这个狼呢,一看是一个老司机是吧,他自己呢搞不定,搞不定了,这时候就开始喊人,他就往那个山下喊,说这个狼来了,然后就喊这些人呢就过来了,这就相当于我们第二种处理的方式,第二种处理方式就是他就开始喊人,他自己呢,搞不定,他就开始Rose,把这个异常呢往上抛,抛给谁呢?抛给这个山下的这些成人,让这些人过来,哎,去把这个狼给干掉,那么这个,呃,这个ROS呢,相当于咱们执行者就可以往上抛,那这个成人呢,当然过来以后呢,他一看他能搞定,就相当于让这个成人,这个大人们去拆开这family围狼,把这个狼给干掉了,如果这个大人们一看说一样有点悬是吧,那这个呢,他还可以再去死Rose,然后那再叫呢,就该叫这个军队的了是吧?哎,那个他还可以继续往上跑,哎就这样,就整个来讲的话呢,就只有这两种处理的方式,嗯。
05:39
再换一个场景呢,就好比是大家这个呃生病一样,你生病的话呢,你可能去找医院去给你看病,然后呢,你先找到这个,这个咱们外边的一个小医院,这个小医院的话呢,一看,咦,感冒发烧小意思,直接呢他就给你治好了,这就相当于叫TRY开finally,结果他一看你这好像是aah几N几了,是吧,这个很严重,说你这个不行啊,他搞不定,这时候他就开始往上报,报到这个整个这个区的医院里边,或者区的医院也区的医院先报到区的医院,然后呢,你这块呢,就相当于对他来讲,对他来讲,其实他也处理了,他也处理了,他的处理方案呢,就是往上报,哎对这个呢,就叫做Rose了,他报了上级呢,上级这个医院一看,诶这个我们有一些经验啊,我我能给你把这个病治好,哎,他就相当于在他这儿呢,他给踹开始了。
06:30
但也有可能一看这个你这个H几N几这个好像是一个新型病毒,他也搞不定,他就往这个北京市报,那就相当于对于他来讲呢,他也给了。那再往上报这个,这个他也搞不定,他搞不定这个还往上报是吧,那总有个头吧,那对于咱们程序来讲,这个头呢,就是你到那个没方法那了,没方法这块呢,你要是还是不作为,还是往上Rose,你已经到头了,还Rose,那就Rose给扎va虚拟机了,然后如果真出现异常了,扎上虚拟机就挂了,哎就成这样了,就相当于这个治病呢,也是一样,你爆抱爆抱得总总得到个头上就得能治好,如果都治不好,那就挂了,就是就挂了是吧,哎,这就算没有处理成,也就是说呢,咱们这个死Rose呢,它其实嗯算成一种处理方案了,但是其实没有本质上把这个异常给干掉,就是这个狼呢,其实它还存在,只是对于你当前这个结构来讲呢,说我处理了,我的处理意见呢,就是向上报,哎这个track finally呢,其实是真正的把这个异常呢,算是给解决掉了,哎是这个意思啊,那么咱们呢,就先来讲一下这个叫try catch finally它的一个使用,哎下边呢,这有关于它的。
07:40
呃,具体的介绍了,咱们呢,直接在这个代码里面来去看啊行这呢,我们就这个还叫做exception的一个TEST1。行,这呢,我们提到叫异常的一个处理,刚才呢,我们讲的就是常见的异常都有哪些了啊讲完以后呢,我们下边来看一下这些异常该怎么去处理,这呢首先提到一个Java当中异常处理呢,说提供了一种所谓的模型,叫做抓抛模型。
08:12
哎,我们先把这个呢概念先放到这儿,抓抛模型你可以呢,理解成就是抓住抛出来的。那这时候我们感兴趣的就是这个抛是什么,以及呢,这个抓是什么,所以这呢,其实涉及到两个过程,先来描述一下,过程一呢,其实就是一个抛的过程,这个过程二呢是抓的过程。抓的这个过程,那抛的过程怎么去理解咱们呢,刚才也演示了很多常见的异常了,这个我们直接呢来描述一下,就是程序在正常执行的过程当中。在正常执行的这个过程中。一旦出现异常,就像咱们前面写的那么多代码一样,随便一个异常都可以,举例子,一旦出现异常,比如说A除以B,这个B呢是一个零,你发现呢,这时候呢,就出现一个异常,那一旦出现异常呢,我们说就会在这个异常代码处。
09:15
异常代码处呢,说生成一个对应异常类的对象,生成一个叫对应异常类的对象,大家你会看到咱们说的这个异常异常举了这么多异常,Java当中都是讲叫面向对象编程的,每一个异常呢,咱们也都定义成一个类了。那你出现了异常,其实呢,都是相当于是有一个异常类的对象出现了,那这呢,就是咱们提到的,就是当咱们程序执行的时候呢,你说出异常了,实际上呢,它是指的是我们在这个位置呢,出现了一个对应异常类的项十除以零,这个时候呢,我们就相当于给这个这个造了一个a a exception这样的一个对象。
10:00
啊,就这个意思,就会呢,生成一个异常类的对象,然后呢,呃,并将此对象抛出。将此对象抛出,抛给谁呢?我们说抛给这个这个你这个程序的调用者了。哎,就是将此对象抛出,这个过程呢,咱们就理解为是一个抛的过程。啊就理解为是个抛的过程,然后呢,顺便再多说一句呢,就是关注的就是一旦呢,这个抛出对象以后啊,假设我们这个代码呢,有十行,你在第五行呢,出现一个异常,抛出来一个对象了,那么第五行以后的代码呢,就不再执行了,就是一旦抛出对象以后呢,那么我们说这个其后的代码就不再执行。哎,其后的代码就不再执行好,这呢是咱们理解一下这个叫抛的这个事儿,嗯,那么抛出来这个对象了,这是只是我们这个第一个过程,咱们主要呢是要处理,所以这块呢,我们就提到抓,可以形象点去理解为就是抓住你抛出来的这个对象,哎我们看看怎么处理,就是说你手里边现在抓着这个狼呢,已经出来了,已经抛出来了,你现在呢,就是考虑我抓怎么去抓,是抓住以后呢给他打死,还是说抓住以后呢,这个搞不定,然后给上一级的这个去处理呢,所以我们这个抓呢,大家可以理解为就是异常的处理的方式。
11:29
异常的一个处理方式,然后这块处理方式咱们呢,提到了有两种情况,第一种呢,我们叫做try catch finally。哎,这是这个情况,然后第二种就是咱们刚才也简单提了一下,叫做roses,哎这呢就是咱们重点要讲的异常处理的两种方式,那我们呢,首先要说的话呢,就是说的第一种叫try catch finally的一个使用。
12:01
这个我们。
我来说两句