00:00
好,那么异常处理的第一种方式呢,咱们就讲完了,就是真正意义上呢,把这异常给捕获掉,给处理掉了。我们诚意呢,继续往下执行,那么除此之外的话呢,还有另外的一种处理方式,这个呢就是方式二,就咱们说狼来的时候呢,这个小孩呢,没有把这个狼打死,然后他就开始喊别人,让别人来处理,对这个小孩来讲呢,他其实也算是给出了一种处理方案,那就是喊人。对,那么这种方式呢,对应到我们这儿呢,就是第二种处理方案,这种方式呢,我们称为呢,叫做死肉死的方式。OK啊好,那么这种方式,首先它的这个格式是什么呢?我们说呢,在方法的声明处啊。声明处。哎,使用这样的一个结构,这个结构呢,就是叫做。叫roses,注意有一个S啊,后边呢,加上我们这个异常的类型,你可以有一个啊,我逗号一下异常类型二,哎,然后你要有多个的话呢,你就接着往后声明就可以了,这样的一个结构,举个例子,比如我这块呢,就写一个方法,咱们以前的写方法这块呢,已经是比较熟了啊,假设我这方法就叫test了,哎就这么着,哎正常你这个方法体,那如果呢,在这个方法体当中,我们说呢,可能哎存在。
01:16
异常。啊,那么这个异常的话呢,通过前面我们讲解这个经验上来看,如果你要是运行是异常,咱们就不管了啊。所以这个时候咱们主要指的是可能存在。是不是叫编译式异常啊?好,编译是异常的程序,要讲编译通过必须要处理,怎么处理呢?我就使用这样的结构了。这个比如说就就就俩吧,好CTRLC写在哪儿呢?写在这个小括号的后面。那写在这儿。你要还有这块,你就逗号呢,接着去往后加就行,你比如说刚才我们这个代码它呢,就可以一个叫not IO。你要还有带逗号就行。哎,就是这样的一个例子。好,下边呢,还有其他一些问题啊,那咱们先呢来操作一下啊。
02:04
在这里边的话呢,我们就直接呢,写一个比如一个方法了,哎,Avoid比如就叫做MESSAGE1。哎,就他。行,呃,这块呢,咱们讲的其实都是针对于编译式异常了。再强调一遍哈,运营是异常,以后就不处理了,好,变异是异常,找一个例子。咱们刚才写的,那其实就是一个例子了。嗯,我要拿的话,我就从从这拿吧。嗯,哎呀,从这拿从从这吧。从这啊。把这一段代码CTRLC。哎,粘过来把这个呢打开是吧。好,Ctrl out加个L来调一下格式啊,行,大家来看。呃,这块呢,大家就先不要去研究,说这个资源应该用track family,咱们现在就把它看成是一段有诶编译时异常的一段代码了,先不看这个细节了啊好,那这块呢,其实我们说有对应的这个编译是异常,说你得提前处理是吧,这时候我们没用track family,我选用叫Rose,那就在这个位置啊,我就想上Rose。
03:05
然后呢,根据呢,里边可能会抛的异常的类型,比如说可能会抛它,那我就这块儿呢,CTRLC这块整一个啊逗号。然后呢,可能会l exception ctrl c。粘过来,其他的呢,情况呢,没有了,这块往这一写,你看就。可以了。诶目前呢,你看这块呢,就不报这个红色的一个线了,说明呢,我们现在就给它处理掉了。针对这个方法来讲啊,我就处理掉了,那么这个方法的话呢,可能会在另外的一个方法中被调用。叫METHOD2。然后诶这个呢,二里边呢,我们就调这个一了,诶你看我这块呢,直接调用它呢,此时了一个红线,这个能理解吗。那这个红线报的是什么呀。说呢,你这个没有处理异常是吧?呃,有这个发放exception,还有这个I exception相当于把这个异常呢,是不是抛给了你这个一的一个调用者了。
04:06
哎,对啊,这就好比是呢,这个MA1呢,就咱们说这个放羊的这个小孩哈,这个小孩呢,没有在它里边呢,Try catch这个羊呢,他没给搞,呃,狼呢没搞定。他在网上喊人了。呃,喊人的时候呢,这个呢,就把这个MA2呢,这个给喊过来了是吧,那MA2呢,这块呢,在调MA1的时候呢,你就得想说你咋整。是吧,这块呢,就MAX2呢,必须要考虑得处理一下了,因为你这是编译式异常啊。啊,麦尔说,说我也搞不定,我也往上跑。哎,那你也可以呢,接着往往上面去肉。然后呢,这个时候roses呢,我们这个MA2呢,又在三里边掉了。哎,麦三。调这个MA2,然后呢,这时候MASTER3呢,是不是就面对同样的问题。诶,小孩呢,喊了一个大人,这个大人呢,搞不定也往外喊人,然后把麦三这个大人给喊过来了,麦三一看说我可以搞定。
05:04
那他在这块呢,是不是就可以踹。Catch了是吧?诶然后我把这个MESSAGE2呢就扔进去,诶根据呢,你可能抛出的异常的类型,我在这块呢,去写这个catch,诶首先file not found exception。哎,这是一个啊1.sta一般呢,咱们都这样去处理了,然后呢,还可能是一个IO的exception。啊,那一点分,那就这样。啊,也没有说一定要被执行代码,那我们暂时呢就不管了,所以呢,这块我们就给它处理掉了,那这个METHOD3呢,如果在其他的方法中被调用了,举个例子啊,你在没方法中被掉了。哎,这块为了方便起见呢,我就不找对象了,我就把下边这几个方法我就都静态了啊。哎,就这么着了,好,那么在main方法里边,我们如果去调这个MA3,还会有异常提示吗?不会了,因为你是不是把这个狼给打死了是吧,所以呢,这个method里边呢,哎,May方法里边呢,就不会再去提示有异常要处理了。
06:03
但是呢,如果你要是在里边去调这个METHOD2的话。是不是这块仍然会出现这个让你处理的问题啊。因为你这块抛了嘛。啊哎,这个要注意注意,咱们已经到没方法了,这就算是到头了啊,如果你到这块,你说这个MA2给咱妹没说我也搞不定没方法说,那你也来吧。建议呢,不要这样去做,就是以后呢,大家处理异常的时候呢,你在一些普通方法当中,你想死肉那行,但是你已经到没方法了,就不要再肉了。这要在的话呢。所以就扔给谁了,扔给虚拟机了,虚拟机的话呢,也没有处理方案就挂掉了,所以整个这个进程呢,就给停掉了啊,所以呢,我们不要呢,在没方法里边去写这种死肉,所以呢,最不行的话,你到may已经到头了啊,你在这儿呢,是不是得给处理一下了。哎,这个要注意这个处理呢,就是跟这个一样吗。那你就加family,这样给大家处理一下就行。OK啊,行。
07:01
这块的话呢,相当于就是我们讲的这个第二种方式哈,那这种方式的话呢,呃,我再举一个生活中的场景,大家也能够去理解啊,比如说呢,咱们说这个普通老百姓啊,你有什么这个不公平的事儿啊,你可以去打官司是吧,哎,去这种法院。好,那现在呢,你有一个案件啊,去法院呢,要打官司了,首先呢,你可能想到的是我就去这个叫呃区。啊,比如距离一个城市的话呢,不都有这个区嘛,到这个区法院呢,我去打官司是吧,哎,把你这个案件呢提交上来了,这个区法院呢一看,哎呀,你这个案件呢。可能比较重大是吧,诶我这个区呢搞不定,然后呢,诶这呢,前面是你这个案件,后边这块呢,是他的处理意见,也就我们的处理方式,他这块说提交到上一级人民法院。哎,他就往上给提交了。哎,他提交到哪了呢?他提交到这个市法院了。对于这个区法院来讲呢,其实呢,你说它处理了吗。也算是处理了,就是网上递交是吧,这有它的处理的方式,那么这个网上递交呢,类似于我们这里的叫Rose。
08:05
然后到这个市法院这块呢,市法院呢,如果一看说,哎呀,我这个我也搞不定是吧,我也往上去递交,那这块呢,也相当于是肉,他就交到这个省法院这儿了。省法院这块的话呢,是可以处理的。那处理了,然后他就诶正常的该怎么判怎么判了,然后呢,你也没有异议,然后被告呢也没异议,那大家呢,就散了是吧,也就相当于呢,省法院这块呢,给开开始了。哎,这个注意啊,那如果说呢,这个省法院呢,他也处理不了,再往上递交是不是到中央了,就是吧,中央这块呢,就相当于我们这个没方法了。中央这块的话呢,是不是就必须得处理了,中央再不处理的话呢。那就说不过去了是吧,联合国也不靠谱是吧。哎,那你到没方法这块呢,我们说呢,不行,你就在这揣开始了,没方法,不要再去死肉啊。哎,这个大家注意一下这个事儿行,那么这呢,就我们去理解一下,两种异常处理的这种方式啊,是有区别的。好了,这个事呢,我们就算是说清楚了啊,大家呢,去体会一下这两种方式的这个异同。
09:05
好,那么下边的话呢,这不就有这样的一个问题了,说诶我们这种方式是否真正处理了一场。对,那这个呢,主要这个字眼呢,就是真正的是吧,怎么算叫真正了啊,诶这块我们这样来说说呢,呃,从这个编译是否。能通过的角度来看。的这个角度看咱们呢,是不是看成是处理了。哎,看成是呢,诶给出了。哎,对给出了啊异常万一要是出现时候的。哎,出现时候的这个解决方案是吧。哎,解决方案,哎,那么此方案呢。哎,就是继续向上抛出是吧。哎,这个抛出呢,就是我们说的这个Rose的这个意思。
10:04
嗯,这个应该能理解,就是呢,呃是否呃真正意义上处理异常呢,就是或者说我们就先把真正这个词呢先拿掉哈,说你是否处理异常呢,咱们还看作是呢,算是处理了,所以呢,也算是异常处理一种一种方案了,就是往上抛啊那但是是吧。啊,但是呢,我们说呢,死死肉的这个方式。啊说仅是。哎,将这个可能。出现的。异常抛给了。哎,此方法的调用者,那么这个此调用者呢。仍然需要。哎,仍然需要考虑如何处理啊,相关异常。哎,所以说呢,从这个角度上来看。哎,我们说这个肉的这个方式呢。
11:01
不算是。在真正意义上处理了一场是吧?OK,处理了一场。行,那大家呢,就明白它的本质就可以了。啊行,这就说到这儿了,然后再下边一个,呃,下边这块呢,其实相当于算是一个跟以前的内容的一个前后呼应啊,我们在讲方法重写的时候呢,其实呢,提到过相关的一些要求,其中有一个要求呢,就是关于抛出异常的这个事儿。啊,因为大家以后呢,方法的重启呢,是。不会少写的哈,那在关于有异常的情况下呢,这个点还是需要大家来注意一下的,首先呢,回忆一下我们当时讲这个方法,重写这个事儿。啊,应该有些同学可能都忘了是吧,当时呢,我们写过这样的一个规则啊,啊,这是方法重写的这个规则,规则呢,咱们针对于这里边儿的每一个细节都讲过了。呃,其中呢,我们当时呢提了一下啊,说呢方法呢,在声明的时候呢,是可能抛出异常的,那么关于这个父类呢,被重写的方法和子类重写的方法呢,这块呢,有个要求,那当时我写了个叫超纲的,咱们现在呢,把这句话呢给他拿过来,CTRLC。
12:12
诶放到这儿说方法重写的要求是什么呢?说子类重写的方法抛出的异常类型可以呢,与父类被重写的方法抛出的异常类型相同,或者呢,是父类被重写的方法抛出的异常类型的子类。啊,看着还是挺长的,其实这个事儿的话呢。不是特别理解。我们写个例子体会一下。这个例子来体会一下啊,好,这块呢,我们专门再去写一个啊。代码啊,这个呢,我们就叫做overre,它的一个测试啊,在这。好,那么刚才这个要求呢,大家都看到了啊,那咱们这块呢,就先营造出来一个子分类的一个关系了,比如这块我就来一个叫father。
13:00
来,Y的,来个METHOD1。哎,这是一个方法。然后呢,我们再造一个子类。这呢,我们叫做一个萨是吧。嗯,让他呢,去继承于咱们的father。行,那么这个方法呢,相当于就是一个叫重写了啊,在重写的时候呢,这块呢,相当于有这样的一个要求啊,如果呢,我们复类当中这个方法呢,这块举个例子,咱们抛出了一个叫做IO的exception吧。哎,这是一个编译式异常啊,那么对于我们这个此类来讲的话呢,你呢,可以抛出跟父类被重写的方法呢一样的。所以呢,一般咱们在开发的时候,其实全都写成一样了,都是吧。对,但是呢,你要细节考虑的话呢,说你这个子类啊,这块你也可以呢,抛一个它的子类。比如IO的一个词令呢,我们刚才提到这个叫file not found exception是吧,它就可以。这块你可以写。父类的这个方法的子类。
14:00
但是你不能写的负哈,也就是这个时候呢,你不能让他抛一个exception。啊,Exception是它的负类了,这个是不允许的。呃,这呢,我们可以看到是一个规定是吧,那么这个规定呢,呃,大家呢,想一想它的原因是什么。咱们讲完面向对象以后呢,其实很多的这个后续的一些规则哈,咱们都可以呢,用面向对象的一些相关知识呢去解释的。啊,体现那个叫做自洽是吧。哎,这个呢,大家能不能呃找一种场合呢,来解释一下他为什么会有这样的一个规则呢。啊。怎么着?继承关系。嗯,继承关系,那这块为什么它可以是子类,不能是父类,或者这个子类呢?你看是可以的,允许的是吧。就是大家来解释一下,就是为什么这块不能写成负类吧。是吧,写成负类呢,它应该在一些场景下呢,可能会出问题。
15:06
那这个就得是营造了是吧。行,这个这个时间关系啊,你看我写一个,我写一个大家你看有没有道理啊。哎,这样子的,这呢,我写个酶方法,咱们呢前面呢,讲过一个知识点呢,叫做多态性。在这个多态性的场景下呢,我现在声明是一个变量,然后右边呢,我new的时候呢,我就拗了一个此类的对象,哎,这不就多肽嘛,然后呢,我通过这个F呢,咱们去调这个MA1。那这时候呢,这个MA1呢,它可能会存在变异是异常,所以我们要处理是吧,那这时候在处理的时候呢,你看我这边呢,加个踹了。然后呢,把它那放进去,那既然呢,你存在变异是异常,我要处理了,那我就要关注你可能会抛什么异常,那这时候呢,我看父类还是看此类呢。负累,为什么?因为编译的时候呢,他认为你掉的是不是就是负类的方法。哎,所以这块呢,我们一定要看这个了,所以这个呢是一个IO的exception,那就意味着我们这块处理的时候呢,是不是我就得这样写了。
16:01
哎,然后这呢,写一个1.print,哎,这就相当于给处理掉了是吧,那么真正当我们去运行的时候呢。实际你掉的时候呢,是不是掉的是这个子类的方法了。那么真正执行的时候呢,掉它了,那么掉它的时候呢,它如果真出异常了,它要抛了,他抛的时候你想想你不能抛比它还大的吧。你炮弹还大的,我这个开始我也开不住你啊,相当于你这个代码,这不就存在设计上的一个漏洞嘛,对于编译是异常一定要处理了,而且我还处理了,而且你也告诉我没事了,结果实际上呢,我搞不定是吧。这个不行,但是呢,如果你要是诶子类这个方法呢,在执行的时候,你抛的是一个,诶上面说明这个子类的话呢,这个子类的这个对象呢,是可以进去的。这其实也体现了多态性。相当你实了一个not,我认为你是个IO,就相当IO。这不也是多肽嘛,是吧,所以这种情况下呢,我可以hold得住。啊,或者说你呃抛的是跟父类这个一样,那也行,所以说呢,父类这块是它子类这块呢,最大的跟它一样。
17:05
也可以呢,是它的子类,但不能是父类。哎,体会一下啊,这个呢,其实就很自然而然了啊,诶,那这个说完之后的话呢,呃,再说一个特别的场景,什么叫特别的场景呢?那你说我现在有一个方法。哎,我叫METHOD2了,这个方法的话呢,根本就没有声明Rose异常。那么问我们这个子类这块呢,如果要重启这个方法了,里边呢,还有编译是异常,那你就得处理了,那这时候呢,你能用吗。不能了,因为它已经没有抛异常你可以想象成它也抛了,但是抛的是无穷小小到那都是没有了是吧,那你这个子类这块呢,再抛也只能说呢,也得无穷小小到那也得没有是吧?哎,所以这个时候呢,你要是试图去抛一场的话呢。对你这块比如抛个他这个事儿是不是就不靠谱了,就。
18:00
因为人家都没有抛,你这块就不能抛。哎,这个注意,所以呢,以后我们会看到有些什么场景呢,就这呢是个接口啊。接口这块呢,我们说都写的这种抽象方法了,是吧,这个抽法方法这块你会发现很奇怪啊,诶怎么写个抽象方法后边还一个异常呢。这出方法都没有方法体了,怎么还死如此异常呢?诶,它是为了什么呀,就是你这个方法在被重写的时候,重写的情况下呢,有可能那个实现类的那个重写的方法呢,可能要抛一场,哎这样的话呢,为了让你能够抛,所以我这块呢给加了一个抛。能理解吧,啊OK啊行,这呢就我们说的这个场景,这个呢,就不要呢再去抛这个异常了。相当于这块呢,我也说明了一个什么场景呢,就是这个方法呢,我们要有编译是异常,你只能是try catch finally了。就是什么时候呢,我们用track,什么时候不能用它,这是其中的一个场景。一会儿我们总结哈,好,这是一个,然后另外的话呢,大家你看这个事儿哈。我再同步的再写一个吧。
19:00
哎,通过这个呢,我想强调一点呢,就是咱们现在说的这个异常啊,哎,都是说的编译是异常啊。你看我现在要再写一个例子的话,我CTRLC咱们按说呢,这块呢,在重启的话呢,说父类没有抛,你也不能抛。你发现的是可以的是吧。这个呢,似乎跟我们刚才讲的这个说,诶这怎么不符合了,诶你说这块你看你没有抛你这块呢,还抛了还抛了还个挺大的是吧,这个注意这时候是可以的啊,因为对于这种运行时异常啊,你写不写都无所谓了。你看我们编译是异常,咱们要是不处理,像刚才咱们讲的。诶,刚才的这个这个场景是吧,这个场景场景的话呢,你看我们这个位置啊,对于看这吧,对于这种编译式异常呢,如果这块我要不写它就是报错啊,所以呢,我们得这样处理一下了,那你这块要有运营是异常呢,它根本都不显示是吧。不显示的话,我就不用去处理了,所以说刚才呢,我们这块这个例子。
20:05
啊。在这个位置,你写不写这个其实都无所谓。啊,这个呢,大家稍微注意一下了,所以呢,再回过来,咱们刚才呢,讲的这个要求哈,来强调一下,它其实只是适用于,或者要只是我们针对于。对,编译是异常。啊来说的运营时异常呢,呃,你就不用看这个规则了,换句话说呢,就是你写了跟没写啊。一样是吧?啊,一样。那就OK了啊。好,这个呢,我们就说完了,那既然咱们讲到这儿了,我顺带呢又想给大家再说一个事儿哈,你看咱们讲这个方法重启的时候呢,提到过这个返回值类型啊,当时这个返回类型这块呢,是这样说的,说呢,如果父类这个方法是Y的呢,你子类也是Y,这没啥说的了,如果呢,父类这块呢,返回的是基本数据类型,子类这个呢,也必必须得是同样的基本数据类型。啊,这个呢也过了,然后看这个说,如果你要父类被重写的方法呢,是一个引用类型,比如说是个类,此类这块的话呢,你在重写的时候呢,可以是你也是这个类,或者你是当前这个类的一个子类。
21:10
你看这块能不能理解哈,什么意思呢?你比如说我们现在这个负类这块呢,返回值假设呢,你看我就写成一个叫number了啊。Number呢?还有印象不?就咱们这个包装类里边那几个数值类型的副类是吧,好这块我就为了让他不报错啊,我就先让他个闹了,然后呢,它呢我这块呢,再往这块呢放一份,第二呢,就是子类这块你可以写成number,我也可以写成它的子类是吧。比如我就写成了。那就这样来写了啊,你看这块呢,它是允许的。因为呢,咱们也讲过多肽了,当时讲重写的时候呢,还没讲多肽呢,现在已经讲完多肽了,诶能不能理解这个事儿。哎,其实也可以理解是吧,你就相当于我们在这块,比如说调的时候啊,我通过这个F呢,咱们去调这个MESSAGE4,哎,对于这个负类的这个方法来讲呢,咱们返回的是一个number是吧。所以呢,我这块要接收的话呢,我只能是用这个number类型的去做一个接收,但你实际执行的时候呢,是你子类重启的这个方法,这个方法呢,你返回的可能是一个类的对象没问题,这是不是又有一个多态的方式呢,去接收而已。
22:12
诶是没有问题的,但是你不能你这个重启的方法,你这块整一个number类哈。那我就hold不住了。你这要说此类这个重写的方法,这是来了一个object。那我这块呢,你我接受不了是吧。所以呢,其实跟上面异常这种场景呢,是类似的啊,所以呢,很多的这个规则呀,它都不是凭空来的。啊,有了一些最基本的一些要求之后呢,其他的规则呢,可能相互之间呢,由于要满足这种自洽,诶我们这块呢,就额外的又加了一些这种点而已啊。好,那么这样的话呢,咱们把这个第二种处理方式呢,其实就讲完了。那讲完以后的话呢,这块自然而然我们就会抛出这样一个问题,异常处理有两种方式,那在开发当中我们该如何选择?想想该怎么选,我们讲了一些例子了。
23:02
啊,有哪些场景我们用track family,哪些场景用throws呢?想想。对,然后我们刚才提到了一种是关于资源关闭的情况是吧。诶,如果你要有这种资源是一定要关闭的,为了保证这些资源呢,一定要被执行是吧。哎,那这个时候呢,我们要使用。哎,这个呢,我们使用的是拆开三是吧。OK,这是一个还有吗。哎,刚才我讲重写的时候呢,提到过一个例子。傅雷呢,这个方法呢,没有泡异常,没有死肉。此类这块呢,如果你要是重写它的是吧,这个呢,你这里边儿有编译是异常。嗯,你能死吗?不能因为他没有肉,你这块你也不能写是吧,诶所以这块你只能是。才开始啊,这个呢,就是我们说的这叫重启的这种场景。
24:03
哎,我就先简单这样一写啊。哎,这种情况,那么这两个呢,都算是我们用的是check finally的这个场景是吧。那么什么时候会用呢?解决不了。对,就是不适合在我们当前方法中去解决的是吧。嗯。对,其实这种情况的话呢,也不少见啊,一般呢是这样的啊,因为大家见的还少啊,诶我给大家呢先抛出来了,比如说呢,我们现在呢,假设这就是没方法了。以后呢,我们这个可能不写may方法了啊,但是我们会写一些方法呢,呃,这个会执行的,因为以后在服务器当中,其实我们都没有may方法。啊,是这个服务器呢,在某些场景下呢,自动的触发某个方法的执行了,哎,不管怎么样,现在呢,有一段代码要执行了,这段代码里边呢,又封装了其他的几个方法。哎,我这呢是写了四个是吧,这四个方法呢,注意它们是依次递进关系。
25:01
怎么叫递进关系呢?比如说我们后边呢会讲,比如说我们要操作数据库了啊,首先呢,第一个方法叫获取数据库的连接。然后第二方法的话呢,诶,你要进行相关的这种增删改查的这个操作,然后呢,操作完以后呢,最后还要关闭相关的资源。啊,这个呢,我们就三个了,就没有这个四了,啊,就是有一些操作呢,是依次递进关系,那我们把刚才说的这几个事儿呢,就分别封装在了不同的方法中。然后呢,这里边儿的每一个方法呢。Abcd这四个啊,他们当中可能。啊,都会出现异常,那么这四个方法,如果有一些编译是异常,我们也要处理,那这时候处理呢,通常在他们这个时候呢,选择的都是Rose。哎,都是肉啊。那这个也同样的道理,然后呢,我们这些roses可能抛出的这个变异是异常呢,我们在这个main方法当中,我们统一的去做这个try catch。
26:02
哎,做这样的一个处理。哎,为什么会这样做呢?啊,你想啊,刚才我强调一个点,他们是递进关系是吧,研究杨ID呢,就是说如果这个A方法呢,真要出现异常了,这个代码呢,BCD是不是就没有必要执行了呀。诶,那所以说这块呢,我们这块整个去加这是合适的哈,然后这个呢,说A出现异常了,BCD不要执行了,那就意味着你要有异常啊,你不要在这里边拆开尺,因为你要踹开尺的话呢,那不相当于你在这块呢就没有看到吗。这相当于你给处理掉了,B就相当于可以执行了是吧。所以这块你要有异常你就抛出来啊,真是要有异常你就抛出来,抛出来的话呢,我就接着去开始,后续呢就不要做了。所以呢,你不要单独的在每一个里边去处理,你要处理的话呢,就会导致我的代码A呢,你给处理掉了,那么就往B走,B呢其实已经不能走了。是吧,类似的这个下边也一样的道理。哎,这呢,就我们通常在写代码的时候呢,能够看到的一些场景啊,好,那么这三种情况呢,我在这个课件里边呢,其实写了啊,就是这里边的这三个情况,哎,我这儿呢,就直接再拿过来了。
27:07
诶看一下啊,第一种情况,如果呢,涉及到一些相关的资源的关闭了,大家考虑呢,用这个圈开翻类呢去处理,保证呢不出现这个泄漏问题,第二呢,就是我们负类被重写方法没有死Rose这个呢异常类型,然后此类这块呢,你重写的时候呢,也不要出现这个异常,你得用这个拆开番类去写,注意啊再强调一下,这呢对应的是对应的是编译是异常。然后这个呢,就我们刚才说的一般场景啊,方法A里边调用了BCDBCD呢,是递进关系,那如果呢,BCD出现异常了,我们选择用Rose,尽量呢就不用check开分类了,然后在A方法当中呢,你用check开番类,统一的去把它处理掉。行以后呢,咱们写代码的时候呢,大家呢,都能看到啊,到时候我们怎么去处理,不断的去强化就可以了。好,两种方式讲完了。
我来说两句