00:00
下面的话呢,我们举例说明一下,常见的这些异常呢,都有哪些啊,就这一些呢,我们通过代码呢来看一下,包括呢,这个编译室异常,我们也看一下到底有哪些不同行,首先呢,咱们先来写一些这个运营式异常,因为运营式异常这里边儿呢,咱们相对来讲还是比较熟悉的,因为在之前的代码当中呢,确实也都出现过类似的这样的一些异常了,行,那咱们就一个个来,比如呢,就按照这个顺序啊,首先第一个控制人异常,举一个控制人异常有难度吗?这个不应该有难度,就平时呢,对这个对象或者说一用数组举例都可以,这呢咱们用一下这个单元测试,直接呢,写完它以后呢,这个导一下就可以了,嗯,数组的话呢,也行,整一个数组吧,In的形的一个二维数组,二维数组不用二维数组也行,一位也行,拿个string吧,String什么也行,这多的都有点不不知道该用哪个了啊,又一个in特型的数组,这呢怎么整啊,怎么就出现控制了,写一个三,然后呢调啥呀。
01:18
几个三,这是控制人吗?这就成角标机了是吧?怎么又控制人了?这写个闹,这样是不是就可以了,对。OK,这呢就是一个now pointer exception行,这呢就要控制帧了,然后对象的话呢也可以,其实对象呢是咱们开发当中见的更多的情况了,对象的话呢,这也是随便举例子,比如我来个string at tr,等于这个呢,我们就先写个ABC吧。然后这时候我们去直接打印的时候呢,Al斜杠打印的时候呢,我们调一下它里边的一个方法,比如调粗针也行,或者我调一个叫叉,我想获取这个首位置上的这个字符,这个目前的话呢,能找到这个小A。
02:09
就是找到这个小A了,但是呢,如果你这个str这个字符串的话呢,根本就不存在,这个时候呢,试图通过对象去调方法的时候呢,这个对象是一个空的,这呢又是一个控制帧。行控制帧,好,这呢叫CL异常,然后接着下边一个叫数组角标L越界CTRLC。TEST2,这呢明确说了是一个数组,角标也进了,那你就举一个数组的例子了,你有一个in字形的一个数组,这呢我写一个,比如说十,那此时的话呢,我们去打印一下AR20就只要呢不在零到九范围内的都算,包括负数对执行。
03:01
OK,这呢叫array index auTo Boun exception,就是这块的话呢,其实你还可以再扩展一下啊,就是咱们这个呢,叫数组角标越界,这个越界这个事儿的话呢,索引越界,或者叫角标越界,其实不管数组,刚才咱们看到了,其实还有另外一个对字符串也可以越界的啊,这个呢,我们得暂时呢先注释一下字串,还比如说这个例子,咱们这呢,写了一个叫ABC,然后呢,我现在呢想查的呢,是它的另外的某一个位置的,我写一个三。显然呢,此时呢,这是所以0123就没有。这呢叫string index autoboun exception,超过人家这个string,因为咱们知道这个string本质底层的话,它也是一个叉型数组。嗯,对,就是你也会越界的啊,这个呢,我们叫string index auTo Boun exception行这就多说了一个有,那这个过了,然后下一个呢,叫class cast exception。
04:03
类型转换异常。那本身呢,人家不是这个类型的,你非要转让这类型,这就错误了,那这种情况下,你看是不是我这一个死stringr往我这块扭一个date,这是吗。对,导一下这算吗?这不算这个呢,你编译就没过,这就是完全的不符合咱们说这个复制符二这个意思了,右边的类型你没办法符到左边,这不算一个这个这个叫class class exception了,当然你可以把它改造成一个满足的,你可以呢,先给他声明成一个object,然后的话呢,你再给它试图强转成一个这个字创。这样本身,嗯,哎,Object string本身呢,人家是一个date了,然后你向上转型,或者说呢,你要多态,然后接下来呢,你就通过这个强转转成一个string,这个呢,我们右边看到的是个object,左边呢是它的一个子类啊,使用一个强转符,从这个编译的角度呢,语法都OK的,只呢,事实上呢,它不是一个data,所以在运行的时候呢,才会发现说class class exception。
05:22
哎,这个大家有个意识,就是咱们这个编译是异常,就是编译时候不过的这些呢,大家会看到这块有差,咱们以前讲就说过了,就是运行时,就是编译时候过了的话呢,这块它就没有叉了,咱们这块呢去rise的,其实相当于我们现在对它进行一个运行。相当于是做这个运行操作,然后呢,下边叫number for me的exception这个这个是什么例子来着。咱们在讲哪的时候见过呀。Number form me的exception,这呢有个字符串叫ABC,或者我先写成123,现在呢,我想给它转换成这个基本数据类型,或者是这个包装类的对象了,咱们用叫in,叫pass in,我把这些呢扔进去,这个呢我们返回一个具体的一个数值,好此时的话呢,是可以转的。
06:25
真是OK的,那如果呢,我们把这个itr呢,我改成一个ABC,此时呢就不行了,叫number form me的exception,因为你本身上呢,就不是一个数值类型的行,这是它,然后在下边呢,叫input Miss match exception输入,这呢就是咱们用的这个scanner了。行,嗯,我们呢,首先去声明一个叫scanner的一个对象,这样然后ctrl shift o一下,那anner这个对象呢,已经有了,有了以后呢,我们通过这个scanner,咱们呢去调它的一个叫next int的一个方法啊,这呢我想获取一个int型的一个数值,Int一个,比如我们就叫学生的一个成绩了,哎,这呢,我们可以对这个成绩呢做一个输出,这个叫score,正常的情况下呢,如果你输入的确实是一个数值类型的。
07:31
这个我们在这儿,嗯,在这儿啊,输入个输入类型,我写一个这个78啊,回车这个78就输出出来了,这是正常情况,那现在的话呢,我们去输入一个类型不一致的这个ABC啊,回车这个在这报的说input MIS match exception好正常叫这个输入不匹配这样的一个情况,然后后边一个呢,叫算术异常,算术呢,这就符合数学上的一些规则了,数学上咱们有一些这个操作呢,是有一些要求的,典型的话呢,就是我们出零的这个操作了。
08:07
哎,我这呢int一个A,这是一个十,然后int一个B呢是个二,我们这时候呢,去出一下A,呃,让A呢去出一下B,这个呢是没有问题的。啊,这个结果呢就是五,但是如果我们这个B呢是个零,就是只要你不是零,正的负的其实都可以,但是你要是零的话呢,这就绝对不行了,现在我们会得到一个无限无限大的一个数了,啊,接近零,它就是一个无限大的数,何况你要出零,这就没法计算了,就叫算数的异常啊,因为呢,你出了一个零,这是这个错误信息,行,那这的话呢,咱们就把这个运行时异常这里边呢,每一个呢都举了举例子,当然呢,不止这些,除了这些之外呢,我们说这个现在我就在runtime except这里边有这么多呢,每个呢,大家都可以试图呢去举一举例子,这呢咱们举的就没完没了了啊,而且有的呢,可能你打开里边可能还会有一些词类,你看对吧,嗯,这个就没有必要了,嗯,大家呢,只需要熟悉一下常见的这样的一些运行式异常都有哪些就可以了,举的这些例子呢,大家稍微有个印象,万一呢,要是问到了,或者说呢,即使问不到,这个开发中你出现这样的异常了,你得知道什么原因造成的,你得会去排这个错。
09:19
图信息好,这呢是咱们说的这个叫运营式异常unche exception或者呢,我们也叫做叫runtime exception,那除了它之外呢,还有这个叫编译式异常,编译式异常的话呢,像这些呢,这都算咱们呢也可以去举例子。就是我们这儿呢,打一条线。这个我们说以下呢,是运行实异常,运行是异常,然后下边呢,咱们举一个编译实异常的一个例子。行,那编译式异常的话呢,这块我就举一个比较典型的例子就可以了,这个例子的话呢,咱们之前的话呢,见到的不多,这呢相当于还是用到我们后边的一个知识,就是关于这个读数据的一个操作了,这呢我就直接来写了,我首先呢,一个file等于new一个这个file这块呢,我们指明具体这个file呢来自于哪,比如我这有一个叫hello.t的一个文件,这个类的话呢,我们需要ctrl shift导下包啊,然后接下来我去创建一个流叫input stream FS等于new一个file。
10:29
叫input stream,这个呢具体内容大家没有见过,你就先看我写这个代码就可以,主要关注呢,就这里边的异常信息就行,这个还需要导可R是O一下,然后接下来,接下来的话呢,我们这个f is,我去做一个read的操作,让它呢去从这个文件当中呢读一个字节,这个字节呢,我们给它存储起来in特型的一个具体的数据,这个我就叫它data吧,然后接下来我们去判断这个data呢,它是否不等于负一,这里边就涉及到这个方法的一个使用了,你要返回负一的话呢,表示文件到末尾了,不是负一就没到末尾,所以说呢,只要你不是负一,说明这个文件呢就有数据,我呢就把这个数据呢给它输出一下,那当然这个时候呢,输出换行就不要了,这个呢,输出的是一个int型的数,比如说这个文件里边写的是个小A,你要这样写的话呢,它就会出现是97,那前面呢,我得需要给它做一个强转,让它转换成就是一个叉类型的这样,那么这呢是咱们读了一个。
11:29
字字节了,那么我们还得去读,所以我在这个Y循环里边呢,再把这个操作相当于一个迭代条件了,再呢给大家写一遍,写完一遍以后呢,再看看你是不是负一,不是接着读走走,直到呢,我们这个到文件末尾了,相当于读完以后呢,这就是个负一,只要你是负一我就退出循环啊,这是这样的一个简简略的一个说明,细节呢,大家不用去关注,那么这块呢,相当于把这个文件呢就都读完了,读完以后呢,我们这里有个要求就是这个呃资源叫f is是一个流,这个流资源的话呢,它不像咱们说的前面这样,这个file对象说呢,执执行完以后自动呢就垃圾回收器就回收掉了,像这些资源的话呢,需要我们显示的做一个关闭操作啊,得这样去去写才行,实际上呢,这样一说说多了,咱们前面这个scanner scanner的话呢,你看这个位置,它有一个警告,说你这可能会有一个内存的泄露,资源泄露,说因为这个scanner没有关闭,你看它这有个警告,这以前呢,咱们因为没有讲留的这个事儿,所以呢,就没给大家说关闭这个事儿,其实正常来讲呢,我们这个scanner。
12:29
在后边呢,你也得去close一下,你看这些close这块这个井告就没有了啊,这是咱们这个讲到流的时候呢,才会说这个事儿,因为你这用了一个相当于是个标准的输入流,从键盘输入嘛,读入嘛,哎这样一个情况,行这个呢就额外说了一句啊,大家可以先忽略这个事儿,后边呢我们再会去讲,那这里的话呢,我们这个呃,资源跟下边这个scanner一样,也得需要显示的,做一个close关闭行,那这个代码呢,就这样写完了,写完以后呢,我们发现那块打几个叉,打几个叉呢,你把光标往这放。
13:02
他这呢会提到说没有去处理,这个叫file not found exception这个呢说没有去处理,叫IO的exception,这个呢也是IO,这呢也是一个IO exception。那凡是出现这样的提到说没有去处理什么什么exception,在我们程序写完以后,这块就打叉了。你就知道这呢就叫编译式异常。对叫编译是异常,意味着就是如果这个代码呢,大家你粘到一个,呃,或者就在这个文件也可以哈,然后咱们通过命令行的方式,如果你要是去操作的话。我们一写Java,我就不演示了,Java c.exe我们去编译这个文件,它直接呢就报错了,报的错误呢,就是这几个错误。就编译时候就错了,编译错就意味着你这个执行完以后,对应的这个字节码文件是不会生成的,而咱们下边的这些。下边呢举的这些呢,都没有叉,你可以考虑你专门放到一个原文件当中,然后呢,你用这个编译运行这命令行呢,你去执行一下试试,你会发现呢,下边这些异常,我们去执行Java c这个命令的时候呢,编译是不报错的,也会生成对应的字节码文件,当我们去执行这个叫Java这个命令的时候,去解释运行报错了,报这个这个这个这个下边这些异常。
14:31
啊是这个情况,实际上也正是因为这样,所以我们才把它叫做运行式异常嘛,因为编译时候人家就没事儿啊,你这个呢,编译时候就有事儿,这叫编译式异常,也叫做受检异常,就这样行,那目前的话呢,咱们还没有讲说这个异常的处理,那你这块看了老是打叉也也不爽啊,这暂时呢,我们就先这样给它注释一下了,哎,下边这些呢,D也没事,我这就不用去注释了,好这呢,我们就举例了一下,说常见的这些异常,这个举例都有哪些,大家呢,稍微有个印象。
我来说两句