00:00
好了同学们,那咱们开始上课啊,我们上午呢,说到这个异常这块的一个东西是吧,那么这块呢,我们也写了这么几个例子啊,然后画了这么一个叫做UI图,那么这个U图当中呢,呃,画这个图的目的就是为了方便大家去记忆啊,知道异常这块呢,它的一个结构,首先呢,呃,有一个叫做object这样的一个类是吧?然后呢,它此类呢叫able,表示可抛出的,那不管是错误还是我们的异常都是可抛出的。那么我们的错误这块呢,是你处理不了的程序,遇见错误呢,只有一个结果,就是退出我们Java程序的执行啊,Java虚拟机就结束了,那么异常这块是可以处理的,那么异常呢,它分为两个分支,一个分支是什么呢?是我们的一个直接子类,还有一个分支呢,叫runtime exion,大家注意这两个异常啊。它的特点是什么呢?如果你是异常的直接词类的话,呃,它的特点是哎在编写我们程序的时候,我们需要对这种异常进行预先的处理,如果你不处理这种异常啊,它会编译报错啊会编译报错,那么这种异常呢,它有三个名字,还记不记得,有一个名字叫什么呀?叫做编译时异常,还有个名叫什么呀?叫做呃为呃叫叫做检查,呃这个受检异常是不是,还有一个叫受控异常是不是?哎受检受控编译时,受检受控编译时,那编译时异常是发生在编译阶段吗?注意啊,编译时异常不是发生在编译阶段啊,是说你编译阶段啊,必须对这种异常诶就是处理一下,要么就是采用上报的这种方式,要么呢就采用这个捕捉的这种方式,总之呢,你必须得处理一下,这样程序才能编译通过,因此而得名叫编译时异常。记住,所有异常都是发生在运行阶段的啊,因为只有程序运行的时候,我们才会利用异常对象。
01:45
啊,那么我们的运行时异常这块呢,其实它发生的概率比较低一些啊,概率比较低一些,那么这种异常呢,实际上我们在程序编写的时候啊,可以对它进行处理,也可以对他哎爱答不理的对吧?哎,都可以啊,你可以处理也可以不处理,那么我们这个呃。
02:04
这个概率比较高的异常啊,是编译时异常啊,概率比较低的叫运行时异常,那么运行时异常这块呢,我还是要给大家说一下啊,这个运行时异常它的呃,三个名字分别叫什么呀?一个是运行时异常,还有一个叫做什么呀啊叫做。这个叫什么呀,边异是异常对吧?啊受检那这个叫什么呀。未受检异常是不是,哎,这叫受控,这叫什么非受控异常啊,你要把这几个名字都记住,因为咱们以后啊,嗯,不一定啊跟谁沟通呢?啊也许呢,呃也许呢,到这个团队当中啊,什么人都有对吧,他可能说诶编译室异常,也有的程序员说什么呀啊叫受检异常啊,有的叫受控异常是不是,你要知道他说的都是这个啊呃,那么为。检啊,或者叫非受控,还有叫运行时说的都是我们的runtime exception,以及它所有的什么此类啊,所有的此类,那么上午呢,咱们除了这个继承结构图之外呢,咱们在这里啊,重点给大家说了一下,我们Java原装处理异常有两种方式。
03:08
那么一种方式是采用上报的方式啊,上报怎么上报啊,在代码上怎么写呢?就是在方法的什么哎位置上加一个throws,然后后边加一个异常的名字,这样的话就相当于是什么来上报的一种方式,就相当于我当前的大括号当中的代码出现异常之后,我采用的一种是不是捕捉,而是把这个异常怎么着啊来上报,那么还有一种方式是什么,就是try catch进行捕捉啊try catch进行捕捉,那么捕捉呢,这个东西啊,是真正的一个处理啊,就真正的一个处理,那么这块呢,大家注意啊,就是我们这里有个很好的例子,就是我给大家说的那个销售员的那个例子,对吧?因为我的损失,我损,因为我的这个失五让公司损失了1000块钱,那么这个事儿呢,你有两种处理方案。啊,第一种处理方案是说把这个事儿报上去,对不对,哎,叫上报,还有一种方案呢,就是说你自己把这个事儿啊给他解决了,这叫什么呀,捕捉啊就叫捕捉,上报呢,是一级一级上报,直到有一个人把它捕捉住为止,但如果说在程序当中一直上报,一直上报,报到闷方棒闷放,如果再往上报的话,那程序呢,就是就是退出了啊,就是退出了没有别的选择啊,另外要知道咱们程序哪能执行哪不能执行,你比如说我们这行代码出现异常,下面代码是不会执行的,你比如说这行代码出现异常,下面代码是不会执行的,对吧?TRY语句块当中,如果这行代码出现异常,那么下面代码是不会执行的。
04:24
啊,出现异常啊,这个代码是不会执行的,就这意思,但是你穿越开始执行结束捕捉住了,那么这时候后续的程序是可以正常执行的啊,大家知道哪里的程序能够执行,哪里的程序它不能执行啊,那么在这个位置上呢,我们说了什么呢?说了我们这个try catch进行一个深入的学习,对不对?首先呢,看下后面小框中类型可以是具体类型也可以是什么呢?我们一个抽象的副类型对不对?哎,抽象的负类型,另外的话,我们catch能不能写多个呀?可以写多个,但有要求catch必须从上到下,从小到大,对不对,你这种先大后小的这种情况是不允许的,另外还有就是catch这块可以是多个异常,中间用竖线隔开,但是你要注意这个在JDK8之前是不支持的,JDK8的新特性啊,才支持的这种语法啊,Catch这块你可以写或者的这种关系啊,这个异常或者这个异常或者是这个异常,我们统一都走这种解决方案啊,或者这种处理方案啊。
05:21
行了,那是这是什么?这是,这就是我们今天上午重点讲的一个内容,其实就讲了两个语句,哪两个语句在方法的后面,我们使用什么呀?哎叫做RO,哎进行上报,还有一种方式是try catch进行捕捉,然后除了这两种语法之外,我们是不是把这两种语法,诶它的原理给大家讲了讲,然后大家去,诶理解理解是不是,哎,理解一下它这个原理是怎么回事儿,是不是,哎原理是怎么回什么?哎,对了,这块我要问一下大家一个问题啊,就是说但家这两种方案都学了,你们觉得将来在实际的开发中,你到底是采用上报的方式,还是采用这种拆开捕捉的方式,你怎么去选择,你有没有什么标准,有没有什么标杆呢?
06:02
对,就这个这个大家有没有有没有有没有思考过这个问题。就是我可以在这里写上一句话对吧?啊,就是在以后的开发中啊,在处理异常,处理编译时异常啊应该上报呢。还是还是捕捉呢,怎么选。记住啊,如果如果希望希望调用者来处理。啊,选择什么呀。记住啊,只有这一个标准,各位没了只有这一个标准啊,就如果以后在程序的运行过程当中,假如说这里出问题了,出问题之后你希望谁调我这个方法,我就得把这个事儿告诉人家,对吧?你觉得需要有必要去告诉人家,那你就采用ROS上报的这种方式啊,如果说你觉得这个异常他发生了,你不希望怎么着啊,他不希望这个调用者去处理,对吧?出了这个事儿之后呢,哎,你自己在这哎处理不需要上报的话,那你就使用拆开进行补助啊,拆开进行捕捉。
07:09
啊,统一在闷中踹,其余的都抛抛给不对啊,你这个说法不对,小鹏啊,你的说法不太对,你只局限于我们当前这个程序了啊,其实并不是这样的啊,在有一些情况下,并不是说在闷当中踹,然后呢,在别的位置都跑,不是这样的哈,嗯,这个说的有点太这个,嗯。太太面太大了啊,不应该这样去说啊,不应该这样去说,在后续的开发中也有可能说问方法呢,去调了你这个方法,结果你这个方法呢,出现异常之后,你不希望问方法,知道你只是希望怎么着啊,哎,你的程序能够继续往下执行对吧?所以这个东西呢,嗯,也不能说那么绝对啊,说那么绝对的话,可能会有问题的啊,会有问题的。呃,总之啊,大家看看人家散写的这个代码,咱们点过去你就清楚了,来过去好,请同学们告诉我这个构造方法是不是创建一个输入流啊,这个输入流是不是读取硬盘上的这个文件,对吧?那么大家想一想,为什么我们这个文件找不到的这种异常为什么要往上抛啊?
08:08
为什么要往上抛啊,各位为什么把这个异常有报出去啊?大家思考过这个问题吗?就调这个方法,你看这个方法在构造执行过程当中,在这里如果文件有问题的话,他是不是就把异常给它扔出去啊?对吧,啊,扔异常扔出去,那么这个异常扔出去。这个异常扔出去之后呢,这边呢,就得处理呀,要么在这try catch,要么在这throw,因为这个throw你有一个异常嘛,而这个异常的继承结构是不是exception啊,它是不是此类啊,各位你好好思考一下,那这个异常必须得处理,你看为什么它在这选是啊。为什么在这个方法选择,而不是在这个里面写啊。你想想自己拗一个异常,自己手动往外抛的目的,是不是就是想让调用我这个方法的那个人知道这件事啊?你是不是想让调用你这个方法的那个人知道,那这这个事儿发生了,所以你是不是要选择throws往上抛,这就是我刚才所说的什么标杆,什么标准啊,哎,其实就这么一个标准啊,如果希望调用者来处理,选择上报。
09:10
给予使用捕捉啊。其他情况啊,使用捕捉的方式,捕捉的方式啊。好了,这是一个标杆,你看你怎么选,到底选择throws还是TRY开,自己以后还是在写成句的过程当中不断的去磨练啊,我应该用TRY开呢,还是说我在方法声明文上使用throw啊,哎,那要看你这件事要不要上报,你要上报你就使用啊,使用。行吧,这是原代码,你看算公司写的这个原代码你看看见了吗?嗯,就这样的啊,可以多看看多看看,这样的话慢慢你自己就变成高手了啊高手了,那么这个异常throw new个non po exception,为什么这个地方这个异常不需要处理,既没有也没有拆开,同学们告诉我为啥。第147行这边他为什么没有TRY开,也没有S啊,你们现在应该能告诉我吧。
10:01
因为因为什么。啊。既没有有没有开对运行时异常来我们点过去啊,Exception的类是谁啊,Run run time exception,这说明空值异常是一个运行是异常,而运行异常不需要我们程序员在编写程序的时候对它进行处理,既不需要也不需要在这check,编译器是不用管的,但你这个not found exception呢,这个是必须要管的啊,你要么在TRY,我说要么在。是吧,你选择那意思就是让调用你这个程序的人知道对吧,你这个事发生了啊,希望调用者来处理啊,希望调整来处理,就像我刚我说的对吧,你由于你的损失导呃由于你的这个失误导致公司损失了一千万,那你这个事就得上报啊,是吧?你说由于你的由于你的工作失误导致公司损失了100块钱,那我觉得你得自己补上呗,然后这种情况的话,你还报什么报啊,丢不丢人是不是?所以这个东西还得自己去思考,自己去想啊,去想好慢慢来吧,慢慢后边做项目越多呢,咱们就越明白啊。
我来说两句