00:00
好,那关于数组这一章呢,我们差最后一个内容叫数独中数独使用过程当中的常见异常,嗯,这个下去走的时候,看大家写代码也确实都经常出现这样的一些异常了,那我把这个异常呢稍微总结一下,嗯,它的意义呢,就是大家再出现这样的异常,你知道是从哪儿去排,那就可以了。好这呢,我们直接来写一个这个例子啊,这个例子呢,我们就叫做a read啊,这个异常呢,咱们后边专门有一张讲异常的,就在面向对象以后,对就叫做exception啊,所以这我就写成叫a read exception的一个测试了,那这个代码呢,主要我们来说明的就是数组中的常见异常。哎,那么在我们写这个数组代码过程当中,常见异常呢,其实就两个,咱们前面其实也见到过哈,第一个呢,叫做数组角标越界的异常,数组角标越界的异常啊,这个呢,英文叫AR inex out of Bo啊写出来意义呢,就是秀一下是吧,有点长啊嗯,但是这个的话其实音译就是直译嘛,数组脚标auTo Bos越界,哎,一场就这个啊,这第一个啊,第二个空指针一场,哎,叫now counter。
01:38
的exception哎,叫控指针异常也是直译啊空指针异常,这个控指针异常的话呢,大家回头会经常见的啊,会你会跟你这个比较亲密啊,见的是最多的,而且在Java当中呢,基本上这个它的异常你累加出来,出现的概率把其他那些异常加起来可能都不如他多,嗯,对啊,刚开始你见到控制帧的时候呢,特别特别怕他啊,不知道该怎么排,那后边呢,你见多以后呢,你发现每次出现一场,你特别希望出现的就是他,而不是其他一些没有见过的一场,因为这一场后边排了好多以后,你会发现其实也挺好排的啊,来我们说一下这个具体这个异常的举例子的情况啊,第一个叫做角标越界的异常,嗯,这个呢,其实很好说啊,我这呢造一个数组。
02:32
哎,我这呢,比如说给大家哎,附上这样的几个数值,五个数啊,那怎么叫角标越界了呀,就是你写的这个角标或者叫索引不在指定的范围内的都叫越界啊,像通常咱们可能一不小心写一个循环啊,而且写个遍历I小于行,写了个等号。哎,加加,哎,那你这个时候呢,我们去遍利一下ari,这要一致行,这是不是就是角标越阶了诶。
03:02
哎,这就ex auTo Bo了,呃,前面呢都没问题啊,都能正常输出,然后到后一个呢,没有了,呃,因为你这出现一个五,呃,我这呢这个呃数据呢就是五个,诶这个你看有点冲突了哈,这个五指的是什么呀。我这五这也是个五,对,这个五是因为你出现了一个角标五,因为我们这就只有五个元素,角标其实最大是到四啊,这个五的话呢,是你出现了一个角标五的意思啊,这要注意不不是这个五啊,嗯,相当于呢,我们右边这个叫越界了,那对应的呢,其实这种也叫越界啊。我如果输出一个A2,这我写一个负二。哎,就是不往右边越,左边也越了,也叫这个越界。你看这不也叫越界,因为你写了个负二啊,这呢都算是这个错误的情况啊啊,而且呢,简单来说,咱们前面也见过,就是如果呢,一旦程序出现异常以后,后边你要写一个这个代码的话呢,能执行不得执行不了啊,在我们的第19行出现异常了,Hello呢,是出不来的。
04:11
嗯,因为一旦出现异常以后,这个程序就算终止了啊,后边呢就不执行了,这个先了解一下,后边咱们会讲啊,好总结一下,我们这个叫角标业界,在我们这个问题当中,咱们角标的合理范围就是从零开始啊,啊角标一,角标二,角标三,角标四终止不是这几个的都叫月界,这边五开头的叫就叫月结,这边负的也叫月结。啊,很好理解,嗯,Java是这样,这个Python呢有点区别,大家稍微了解一下啊,Python的话呢,它也可以定义一个数组,只不过它它叫做列表了,其实就是数组哈,嗯,它的索引的话呢,也是正常这样一个范围,但是它可以往前写负的,比如我这呃,写一个负一,它就相当于是五了,哎,我要写负二呢,相当于就是四了。
05:00
哎,负三呢,相当于就是这个三了,哎,往前走一轮,再不能往往这边写了。呃,再写的话呢,他就也报错了哈,就是它能允许你正常范围它往前写,写一写一遍,负的呢也行,他能找到从后往前这样一个顺序。嗯,人家就更方便一些,其实是吧,咱们Java呢,就更严密一些啊,哎,角标是多少那就是多少,只要不是这个范围之内的都叫越界,哎,就这意思好,第二个叫做控制针异常。嗯,这个回头大家出现这个脚背尾界呢,你就知道怎么回事了啊,你就去奔着那个方向去排,你肯定那个不在正常的范围之内,嗯,比如说呢,咱们嗯前面写这个写这个什么呀,写这个bubble salt的时候,这个位置大家如果没有减A,或者说你这个位置呢,一不小心这写了个等号。啊,像这种问题呢,你要一直行哎,这都是出现叫交臂尾界的啊,这种你看着就是知道是怎么回事哈,但是你要排的时候呢,有时候还真得细看一看。
06:05
啊,有的可能,呃,找这个问题点在哪呢?可能也需要花一点时间啊。好,那还回到咱们这个问题,控制针异常。哎,这个呢,大家也都出现过,那我们来总结一下,首先呢,方式一。啊,不能叫方式以了,叫情况一,我这儿呢,比如还以这个特型为例。啊,这我写个123好,接下来的话呢,我们去打印一下这个第一个元素,这呢肯定不会控制帧,哎,就出来个一啊嗯,那么有的时候呢,你会出现在下边呢,对这个数组又重新赋值了,或者重新在指定的时候呢,结果是一个no的值,或者说呢,在一开始你生病完以后呢,你就没有给他去赋过值。啊,那就都是闹啊,如果这个数组呢是个闹,这呢就是一个控制针。
07:05
这就是个控制针,嗯,怎么理解?这是站,这是堆,本来呢我们这个二十五行哈,我这个AR1,哎指向呢堆空间,你右的一个数组长度是三啊,这个是一,这个是二,这个是三,把它的首索引呢付给他,然后我就指过来了,结果呢,你这把这个A21呢改成绕了,就相当于本身我这个A1这块是有地址的,现在你把这个地址给它擦掉,这个指针呢就没有了,没有指针了,你再想通过A1去找我这个第一个元素,那就叫空指针,没有指针了。哎,就这样形象点去理解。这个可以是吧,哎,一旦呢,你要是一位数组出现控制呢,你看一下你这个是不是数组没有造,哎,或者说你又造了,后边又赋值赋给一个闹了,这也是,嗯,好,这是我们说的这种情况,然后这个情况二,这个我得先注释一下啊,要不的话下边跑不了了。
08:09
情况二的话呢,我们造一个二维数组。诶,这个我就这样来演示一下,我这儿写了一个四,后边这个没有写。后边没有写,现在呢,我去打印一下AR2,这样会控制帧吗?不会不会的话呢,输出是多少。嗯。哎,有同学说是地址值,那这个的话呢,你还得看看咱们讲二维数组的那个默认初始化值那块。嗯,咱们得零六。那这个咱们刚才写的,这不是属于这种情况吗?这种情况呢,你看这不我写着呢是吧,哎,就是再去理解理解啊,这个时候呢,我们这个值是个no。
09:08
是个no啊,它的内存这不就长这样吗?说明内存图这块呢,大家有的还不牢固啊,嗯,再画一画,这个呢,是叫A2,实际上对空间一开始呢,长度是四,这个地址值给到它,哎,它就有了,就过来了,然后这个没有写,所以呢,就是意味着你下边再去指定一维的时候呢,没有指定啊,所以这都是now啊。这都是now,诶注意啊,我这要写上一个还是闹吗?写上就不是了,那就意味着你是不是又给他具体指定了个地址,这样负了是吧,这就有地址值了啊,你要没写它就闹啊啊这个呢不是控制帧,关键呢就是我下边又写了一个。这不就控制人了吗?这不就控制人了。
10:02
嗯,还是刚才那个图,这是占,这是对,然后这个呢,指向过来,你这有四个,嗯,这里边每一个都是now,你通过它呢,在试图去找下边的,这都闹了,你哪有指针呢。哎,所以就控制针了啊,那这个呢,就好比是大家上午我们讲的这个阳灰三角,阳位三角呢,我看有好几个同学都出现了,就是前面呢,这个没有问题,然后在这个for循环里边,这行代码呢没有写。这行代码没有写。我要执行。怎么着了?报错,这不报的就是个控制人吗?嗯,就是我这样造完,这不跟咱们刚才举的这个例子一样吗。哎,你这个造完以后呢,我这个内存的这个还没有去初始化呢,你上来就开始找里边这个元素了,肯定没有啊。所以这个代码呢,千万不要丢了啊。哎,小心一点回来啊,这是我们说的这个情况二啊,然后呢,再举一个情况。
11:06
情况三,这个情况三呢,严格上来讲呢,其实不算是咱们现在讲数组的情况了,但是不排除有的同学会出现string数组三又一个数string。嗯,正常来讲的话呢,这里边可能都会有些值哈,比如说AA啊BB哎,CC好,那有这个值的话呢,我们下边呢,比如我去AR23,哎,找到第一个元素,我调它的一个方法,随便调一个啊,比如调一个two string的方法。哎,我们执行一下。哎,这个结果呢是AA,哎这呢是一个正确的情况啊,就是相当于我找到第一个元素,把这个第一个元素的内容呢,给大家输出一下了,哎,这就是AA了,哎但如果说你第一个位置的元素呢,我这是一个no。
12:00
就是第一个元素呢,恰好没有负值啊,或者这样写也行,先不让你是个no,我在下边这块给你改成是个no。一样啊,一样啊,我们在执行。看,这就是一个控制针。哎,这就是控制针啊,就是出现控制针的时候呢,大家能够知道是什么原因造成的,哎,这样的话呢,你才能够回去去改啊,是这种啊,那么这种情况三呢,大家出现呢,可能要少一些啊,因为这个呢,其实真正呢,才是咱们后边讲面向对象的时候,大家常出现的一种情况,就是我们这儿呢,调的是一个方法了,对你这个方法前面呢,实际上是一个对象,这个对象呢是一个nor啊,这个对象呢,虽然咱没有讲,大家呢就可以暂时呢,也可以把它看成是数组的这个变量一样,它里边也是要么存地址,要么存是no啊,因为我这是个nu啊,所以说你再通过闹再去调一个东西就调不了,哎,就是控制帧的。
13:05
行,那么大家呢,现在出现控制帧的情况呢,无外乎就这三种啊,总有一种适合你,你看是哪一种,然后改过来就行了啊,就行了啊。
我来说两句