00:00
好,那么咱们呢,关于这个数组的常见算法呢,花了很多的精力呢,去讲这个事儿,这一块呢,其实啊,你要是呃算法来看的话呢,其实也没有特别多的这种新的知识的,就是针对于咱们前边讲的一维数组,二维数组,在实际开发当中,我们看看都会有哪些场景,都怎么去用这个数组的,咱把它归结成了不同的算法操作了,诶必要的一些操作呢,大家还要下来去熟悉熟悉。啊,其实这个熟悉的过程啊,其实你这个异位数组主要呢,是异位数组的使用了啊呃,相应的这种六个知识点啊,其实也就掌握了啊,然后最后这块呢,咱们关于数组这一章呢,还有两个知识点啊,第一个呢,就是关于这个俄瑞斯工具类的一个使用。啊,那数组的话呢,在开发当中比较常用的那么常见的一些操作啊,我们就把它封装在一个工具类里了。大家有需要的时候呢,你直接调这个工具类的方法就行,就像咱们前面呢,比如说想获取一个随机数,诶咱们其实就用到了一个ma这样的一个工具类。哎,这个呢,就叫数学的工具类了啊,包括呢,咱们讲那个,呃,多少以内质数输出这道题,咱们还调过它那个开方的那个方法。
01:03
还有印象不?这个是吧。对square啊,就开方的这样一个方法,就是跟数学操作相关的,你就去这个类里边去找就行,都现成的啊,然后呢,诶跟数组操作相关的呢,除了我们自己去写一些操作之外呢,它还有一个工具类,诶大家呢,有必要的时候呢,你要操作数组了,就直接找这个工具类的方法就可以了。啊,其实这块一说呢,就提到了说Java啊,优势到底在哪儿,咱们第一天讲课呢,提到了好多是吧,明向对象性啊,安全性啊,阶状性啊,啊跨平台性啊等等啊,其实这些特点呢,你发现了很多现代语言呢,也都有啊。最主要的一个特点,最明显的就是。Java的社区呢,特别活跃。Java成效多嘛,是吧,诶所以呢,就是有大量的现成的一些开源的框架和一些源码炸包,你可以去使用的,这个呢,是很多别的语言呢,目前是不具备的,说白了就是生态建立的好是吧。啊,就这样说,你现在为什么用安卓,你怎么不用Windows phone呢。
02:00
现在都没听说过了是吧?啊,因为微软的window phone里边呢,根本就没有一些什么应用了。你肯定就不愿意用它了是吧。OK啊好,那这呢就我们要讲一个知识点,最后呢,我们再去总结一下常见的异常,诶那么整个关于数组呢,就结束了啊,那么这个工具类啊,首先我们说一下这个类的话呢,我们通过API文档的角度呢,先来看一看啊,打开我们这个index。啊,在这个位置啊,这个文档呢,还有同学反馈说不太会用哈,其实比较简单啊,我这呢是在这个API这个文档里,这个我在这集成了哈,就是给大家发的这个资料。是不是就在这个资料里边。这个资料,这个API文档,然后这呢,我放了好多的版本啊,这个是一个中文版的,你要想看中文版的,你就这样打开之后,然后呢搜索啊,一般呢,我们用的主要呢,就是搜索功能,你点那个显示。显示呢,这块你看这不有几项吗?在这个索引这块呢,你就输入了一个叫A瑞。瑞是吧,然后呢,一回车。你看第二个是哈啊。第二不是,第一个是。
03:01
那点第一个这不就过来了吗?诶关于这个瑞这个工具类啊,下边有些描述,下边就是它的一些方法。这个是1.6啊,是个中文版的,其实这个虽然说比较老了吧,但是这个翻译的中文版的是非常经典的。然后1.8呢,你要看的话呢,诶,这也是这样的一个手册了,呃,还是在这个位置有一个索引,那你要没看着的话呢,是不是就隐藏了哈,点显示点索引这个呢,你去输入A瑞一样的道理,只不过呢,它是一个英文版的而已啊。那这就英文的说明,其实1.6跟1.8呢,就完全是匹配的啊,比如说你看一下这这段话,这段话的话,你放在1.6里边呢,就是对应的前面的这段话。都能匹配的上的啊,通过这个呢,其实你也可以学学具体的一些单词是什么意思啊。多维数组是吧,在这块也会有对应的,这个叫。没有啊。啊,错了,操作数组是吧,看错了啊,反正多维了啊,操作数组这块你看就有对应的这个操作数组这个词。没问题啊,就是完全对应的啊,你可以通过这个去学英语啊,然后的话呢,咱们现在讲的是17把这个挤压以后呢,就上面这个上面打开以后,这不有一个index嘛,我这只不过是集成到这而已了啊。
04:10
好,那么这个打开以后的话呢,它的搜索呢,是放这儿了。啊,这个你接着去输入这个叫瑞斯。诶是在这个U这样的一个包下啊,工具类这样一个包啊,Scanner也是在这里的。点开以后啊,这呢,就关于这个工具链的一些具体的说明。啊,他从1.2这个版本呢,就开始有了,OK,然后下面呢,就是它常见的一些方法啊,挺多的。啊,这么多咱们就不一个个去讲了,那讲不完了就是吧,诶常用的一些呢,这块咱们就测试这样的几个啊,诶我呢在这个课件里边这块写了。哎,A瑞斯是吧,首先呢,我们看到它的一个位置呢,哎,它呢是处在。哎,java.u。包下是吧。哎,这个呢,大家做一个了解就行啊,然后呢,它具体的作用呢。哎,怎么去解释啊。
05:00
哎,这边提到了是吧,它是呢,操作数组的一个工具类,包含了用来操作数组的各种方法。这个我们CTRLC一下啊,诶把它粘过来就行了,就是工具类啊,然后课件里边呢,这块我把它常用的方法呢分了分这个类别,诶有哪些相应的方法,咱们这块呢,就挑着几个相对来说算是长的,做一个测试就可以了。好首先来看第一个。这个呢,叫做equals哈。说呢,我们去判断一下这两个数组呢,是不是相等的。哎,比如说啊,咱们就定义两个数组了,叫A21啊,你有个特性的数组,比如这个呢,我写成12345。是吧,然后呢,我再定一个数组啊,我叫AR2啊,也叫12345。啊,注意它这个定义呢,是不是相等,呃,不是简单的我们这样去比。啊对,哎,我们这里边儿呢,你看啊,我这写的是这样啊,说AR一等等于这个AR啊这个呢,判断是啥呀。
06:04
对,就是你就是大家说判断值,你就你又回顾到最初,最初什么呢?就是你存什么,我就比什么。这句话呢,放到什么时候都是对的啊,你存的是地址值,那我就比地址值,你存在呢,比如说是in的形的一个ii存的是五,那你我就比五。跟你那个数是不是相等是吧,所以这块呢,这个符号意思就是存什么就比什么,你存地址就比地址,显然不一样,所以这呢是false。哎,这是false啊,那用我们这个方法呢,它比的不是地址了。他比例是咱咱都懒得用方法了,直接调不就调等等不完了吗?是吧,他比的呢是内容。诶,你看我这块呢,去调一下这个叫啊ari。哎瑞这个工具类,然后第二这个叫一方法,它其实有好多种类型都可以比,只不过咱们现在用的呢,是比的int型的数组啊,我把这个AR1呢扔进去,A呢扔进去,捋完以后的话,它会返回一个布尔型的值哈,直接呢我们去接收一下这个咱们讲的方法呢,这些大家就都明白了啊,这个我就判断一下你是否是E的。
07:03
哎,就这样来直接打印一下。啊,Is equals。它呢是一个布尔型的,那不是true就是false,那此时的话呢,它比的是两个的内容是否是相等。哎,那么此时呢,运行一下。哎,这个时候呢,它就是一个出的。哎,注意这时候这是出的比的是内容啊,这个怎么比呢?就是一个一个比哈。只要出现一个不相等了,它就是false了。啊,从这个角度出发,但是你看啊,我这样写啊,我把这个A2呢,我重新的给他再去赋一个值,我赋成叫12354。问,这俩相等吗?哎,有有说是相等的吧。有时候相等的,那说明你对数组这个特点啊,理解的还是不到位的。哎,这个我们用哪个支点去解释就清楚了。对数组我们说是依次紧密排列的,是有序的内存中的这个结构是吧?诶所以这块你写成12345,跟系成12354是不一样的哈,就跟大家你这个美团外卖上,咱们这儿看到的一个一个的商家,这是我们称为呢叫一个item哈。
08:10
啊,这个item呢,其实就相当于我们这个速度里边的一个元素了啊,你本来你想点这家饭店呢,你点进去结果呢,你认为是无序的啊说这用户点的可能是别的,那不乱套了吗。我点的是谁,那我点的是索引一的这个位置,那它就得是把这个显示给我啊,所以呢,这是严格有序的啊。好,如果呢,你想看一看它的源码是怎么写的,大家按住这个CTRL键。诶,你看这时候它就变成那个超链接的方式了,你要点这个呢,它就回归到关于这个俄瑞斯定义这块了。哎,从1.2版本开始的,实际上上边你看这些描述哈。上面这描述呢,其实就是咱们这个。API文档里边的上面这些描述。就是这些描述啊,呃,这个你可以这样点一下就能看到,这实际上就是个文档注释。这不又回归到咱们第一天讲课的时候呢,文档注释用Java do可以解析,一解析完了以后呢,这不就生成一个网页的形式了吗?
09:02
哎,就这个意思啊好,嗯,那回过来,我要是按住CTRL键点那个ES,我一点这不就回归到这儿了吗。啊,这呢就是比较它俩是吧,如果你俩地址一样,那直接就一样了啊这是一个快速判断,我都不用比内容,你俩地址一样肯定一样是吧,地址要不一样的话呢,这时候他的依次呢,去匹配它里边这个细节的这个内容了。再往里边去看就行,当然这还有这个快速的,就是说长度一样不一样,这也是快速判断是吧,诶长度都一样了,我们在里边去依次比,你再点这个,你看他打比的。啊,以此类推,只要不相等,那就认为不相等了是吧?OK啊行,这个呢是我们说的第一个方法,然后第二个方法,这个呢叫toth润啊,这就比较简单了啊,你看我直接我打印下A1这个咱们都知道打的是地址值。哎,就成了这样一个情况了。哎,这个我们就放在这儿啊,所以呢,我们要想看一下这个数组里边这个内容,原来呢,咱们都得自己呢去写for循环,哎,你要说简单的就想看看内容是多少,其实你就用我们这个叫A。诶,它里边呢,有个叫图存的那个方法,你把这个A呢往这一扔,它呢会返回给我们一个字符串,这个字符串呢,我就直接打印了啊。
10:08
直接打印这个字符串就行了,他呢就直接把我们这个元素呢给显示了一下。那就不用你自己去写for循环了啊,但是呢,它这个逻辑呢,你也能想到啊,我点to string这里边做的事呢,其实也是便利了一下,只不过这个便利呢,它使用了后边我们讲的一个string builder啊,作为一个字符串呢,给我们一点点拼接到一起的。啊就可以了,大家现在可能看不太懂啊,以后呢,慢慢就懂了。哎,现在你也不需要看源码啊,你只需要呢,知道这个方法是什么作用就可以啊,下一个这个叫few啊,Few叫填充的意思,来演示一下,诶我呢直接还是调我们这个race啊,调这个叫F,把我们这个A1呢往里一扔,然后后边呢填一个值给我写成十了。啊,写完以后的话呢,这个呢是个word,就是没有任何的返回值啊,需要去接收的,那操作完以后呢,我们再去打印一下我们这个are。
11:01
哎,我们再去做一个run。这时候你会发现呢,我们把每个元素呢,都改成十了。这个呢,就是相当于是替换值的意思。那这个源码呢,其实你也能猜得到,它不就是把我们这个数组遍历了一下,然后把这个后边这个值呢,覆盖掉原有那个位置上的值吗。比较简单啊,只不过这个位置他没有用这个点了,它是把它定义成个变量这块直接用这个变量名了,一样的道理啊。好,下边这个呢,叫做salt排序呗。那这个呢,其实就是我们涉及到了前面讲这个排序的这个操作了,比如说这个我们随便整一个数组啊,假设就是他吧。And c。啊,这个咱们拿过来啊,这个我们叫三好,那现在呢,我们想把这个数字呢,给大家做个排序啊,你就不用以后自己去写这个冒泡排序,快排呢,也不用你写,直接呢,你调我们这个A瑞有个这个方法叫做salt,我把这AR3呢往这一扔。太好了。啊,拍好以后呢,你再打印一下看看,哎,也不用你自己写for循环了,直接呢,我们去调一下这个方法叫图词论就可以了。
12:03
啊好,我们看一看啊,一开始呢长这样,现在我们排了个序。哎,你看这时候,这不就是个生虚的吗。哎,那么它使用的是什么排序算法呢?按住CTRL键,点一下T这块一进来啊,这呢就是一个快速排序。哎,做的排排序方式,诶,这个sot里边呢,这不是有它具体的这个排序方式,Sot里边又调,这是另外一个sot啊,在这个sot里边,它又调他自己。咱们刚才那会儿讲的时候,不是也出现了叫自己调自己吗。诶,这个我们再对对。这个就是它具体的一个核心的一个逻辑了,是吧。哎,自己聊自己是吧。哎,就是递归方法这个调用跟咱们那写的这个呢,整体逻辑呢是一样的啊,但是你明显感觉他这个代码量好像写的有点大是吧。对,因为呢,整个源码他在编写的时候呢,要考虑两个事儿啊,第一个效率问题。我们有时候可能编写的效率会稍微的差一点的是吧,呃,因为呢,咱们写的效率差一点,以前我也说过这个事哈,就是这个。
13:02
Java呢提供的API文档,API呢,它会被我们所有的开发者所使用,我们呢要频繁的去调用他们这样的底层一些码,所以这个呢,因为调用的频繁,它的效率呢要高一点,咱们写了一个呢,你就自己调了一次,差点呢就差了也多不了多少时间是吧,这个呢要调的频率极高,所以这个效率呢就很讲究了。所以呢,底层源码提供的时候呢,第一个性能要好,像比如说乘以二这种事儿,它就都是左移移位的啊。好了,那这是一个点,另外一个点呢,就是考虑到这种间状性的事儿啊,你要考虑到任何通用的这种场景,诶我们自己写的话呢,你这个场景少,那由由于呢,它这个代码呢,被多次频繁调用,你就要考虑用户的各种的场景的操作了,万一要这块性能要差了啊,兼容性不好了,直接就报bug了,或者有漏洞了。啊,这就是比较重大的问题。那基于这个场景之后呢,很多时候呢,我们发现呢,还是看不太懂,因为呢,这个底层那个代码量其实也不小,它会呢,相互之间我能借用的我就借用了,所以呢,你会看到一会儿掉那个那个又掉这个感觉上好像挺绕似的。
14:04
哎,那怎么办呢?诶以前我说过这个事儿,你要是看这个01:17啊,其实就是JDK17了,看这个版本看不懂,你往前翻到八这个版本。你可能就能看懂了,因为呢,他这个代码呢,他不也在自己不断的去整合嘛,越整合呢,你就越看的就不太明白了,你翻到1.2的时候,你发现他写的代码的水平跟你也差不多是吧。OK啊行,这个呢,就是我们说的这个关于啊,刚才说的这个操作啊,就是它底层呢,调的就是快速排序。然后呢,我们说到这个查找的时候呢,我们讲过叫二分查找,诶那它这呢,也有现成的这个方法,哎,我直接呢,放在这个数组过来之后呢,我看一下这个元素呢在不在。哎,不用你自己写这个二分查找了,但是注意这个前提得是有序的啊,比如我们上面这个A23,我这块呢,明显已经排好序了,我就针对它呢进行一个二分查找,诶直接还是啊A。哎点哎,我们就bary search,把我们这AR3呢往这一扔,哎,我想找一下这里边的这个。
15:00
五吧。哎,这个我就写个五,哎这块呢,他就诶如果找到了,他就会给我们返回这个索引了。好,这块我们就接收一下啊index,来打印一下这个index。说这个index的话呢,只是找到了这个打印,那要找不到呢。来先看一下啊,找到了是吧,找到以后呢,注意是针对我们有趣的这个数字来讲,是不是找到了,所以是二嘛。没问题是吧,好,那要没找到呢。比我这块我来一个15。这里没有吗?来,走起。哎,你看这是他返回这个叫负五是吧。哎,就是这个负几呢,你现在细节你先不用管,只要它返回的是一个负数,就是没找到的意思。因为咱们说这个索引最小的是零,你比零还小,那不就意味着不存在吗?哎,就是找不到的意思,哎,其实你把光标放在这儿的话呢,也能看到这样一个注释信息,这个注释信息里边呢,这呢就表示它返回的意思了,就是你要找到这个key它的一个索引是吧,说如果呢,这个呃,它包含了这个索引,嗯,就是这个逗号啊,这个分号说如果你要是包含这个元素的话呢,我就返回你这个K的这个索引了,否则的话呢,我就返回的就是你大概应该要放在哪的那个位置,然还是个负的,再减个一,所以这呢就是有时候会负五负三,这个负数不一样,但总归你只要是负数就是没找到。
16:25
哎,这个点就清楚了,所以这块细节呢,大家你也可以再加个一附判断哈,哎,如果要大于零,那你说找到了索引是几小于零没找到。写一下啊。哎,如果它呢,是大于等于零的是吧。这个呢,你就可以写这样一句话,哎,说呢找到了。哎,索引位置为。诶这个呢,就加上我们这个就可以了啊,这两个else呢,就是你是小于零的哈,这个呢就是未找到。哎,就可以了。那么这儿呢,我就给大家呢,列举了一下咱们俄瑞斯里边呢,常见的几个方法,诶列了五个,还有其他的一些呢,咱们用的频率呢,就相对来说低一些了啊诶那么后边大家需要诶操作这个数组的时候呢,你可以来考虑考虑,是不是在这里边有一些现成的方法呢,可以供我们去调用,哎直接呢去调就省得你自己写了。
17:17
好,那么关于数组这块呢,我们其实啊知识点的话呢,到这也算是就结束了,后边这块我们加了一个呢,相当于是一个小结了,咱们在前面呢,写相关的算法题的时候呢,其实也出现过相关的一些异常了,这块针对这个异常呢,我们做一个总结,诶整个来看的话呢,我们其实遇到异常呢,就两种啊,第一种呢叫数组。对角标越界的异常。这个英文呢,叫做a index out of bos。对,Exception。有点长啊,但其实呢,挺挺好力气的是吧。嗯,对的直译就行啊,对另外一个呢,我们称为它叫空指针的。一场空。指针就是。
18:00
Poer。哎,他的。哎,这里边儿这个异常这个单词呢,就叫做exception啊。咱们后边呢,讲到这个这个第三个阶段的时候。对,我们一上来呢,就讲这个异常。啊,就是专门的讲异常都有哪些,以及呢异常该怎么去处理是吧?诶待会我们重点去讲啊,到那个时候呢,我们还会呢,再去提这样的两种异常的情况啊,现在我们就只是先接触一下。好,那么这块的话呢,首先第一个问题啊,我们看看在什么样的情况下呢,会出现这样一场,诶,咱们给大家呢,去举举这个例子啊。哎,这个就就写到这了,哎,就是这两个啊好,首先呢,来看这个叫角标越界的异常,哎,咱们就不妨还拿in特性的数组来去举例,这个呢长度是十。它的有效范围大家应该都清楚啊。对,应该是零。啊,12314。那一直到九是吧。只要不在这个范围内呢。
19:01
全都是月结啊。诶,那典型的话,一般大家都是抄一个是吧。哎,因为咱们总是认为说,诶第一个不就是一吗?哎不对,第一个是零是吧,哎所以呢,经常一不小心就写成这个十了啊哎这呢显然就是越界的。哎,14行在这儿说,那你看啊,哎长同学是十,然后你这个index也是十,这不就auTo Bo了吗。啊,越界了。好,这个呢,前面我也提过这个事儿啊,哎,这个负的其实也越近啊。我来一个负一。是吧,角标服役那哪有啊?这也不行是吧?哎,这不可以,哎这个呢,跟Python不太一样啊。对,Python不是这样,Python这个是这样的,比如说我这个叫1234,我这四个元素啊,Python的话呢,比如说这也是0PYTHON你要写负一呢。所以它就是四哈。对于负二呢?那就是三是吧,哎,负三呢。二不是呢?他就只能一次哈,就是只支持你往前这一次,你说我负七是不是还能这样,再好几轮不行哈。
20:05
哎,对啊呃,这个呢,相当于它的兼容性似乎要好一点是吧。Java呢,更严格。那就是不允许。所以呢,其实大家能看到就是,呃,大家学完Java以后,Java还算是一门比较重的语言啊,就语法规则呢,很多很严格很严密,呃,当大家学完Java以后呢,你再接触一些比他要简化的一些语言,像Python啊。Skyla,差不太多啊,GS。啊,JS长得都像Java是吧?Javascript前面叫Java的一个前缀是吧。但跟Java呢,其实没什么关系啊。就跟说警察局的就是跟雷锋和雷峰塔的关系一样是吧。啊对没什么大关系,但是呢,他确实借鉴了Java的语法了,诶所以大家学完Java以后呢,我们像这个咱们Java的同学啊,在第二阶段我们学javascript,其实一天的时间,基本上javascript你就掌握的都差不太多了。啊,他们前端那个要学十几天是吧。
21:00
呃,他们学了十几天呢,他学到很多面向对象的东西,咱们在嘎巴里边全都讲了。啊,这样的啊。啊,Python也一样啊,上手会很快好,这呢是我们的第一个啊叫杯越界的异常啊,这就完事了啊呃,那么大家在写代码的时候,你可能说说,呃,我写成这样我肯定不会的。我怎么会越界呢?像这种问题一看这就肯定不会写的,有点侮辱你智商一样是吧?你平时这样写肯定是少的,但是呢,你看咱们刚才做这个。是吧,做这个排序也好,查找也好,里边呢,我们经常会出现像这种呢。对,你这块又加一了,又怎么着了,这个位置你写的时候呢,就要小心点了。啊对,你在操作的时候呢,它会出现一个越界的场景。啊,小心一点。嗯,再拉回来啊,哎,下面一个问题呢,叫做控制人的异常。那么这个控制异常的话呢,给大家呢,举举例子啊,情况一。第一种哈,咱们还以因的行为为例吧。哎,你用一个in的形的一个数组,这这个呢是一个十吧。
22:04
好,你说这个时候呢,我如果去打印一下这个A角标零。社会控制人吗?不会,这是多少?明白。对的啊,没问题好,然后呢,你可能中间又做过一系列的操作,最后呢,效果呢,就是把这个are呢给支撑到了。在这种情况下呢,你再去打印。这个呢,就是空指针。23在这儿是吧。哎,说呢不能够,哎去找到这硬件速度A1A1是个no。不行,哎,这呢是一种场景啊。呃,这个场景是这个意思啊,本身呢,这个叫战。这叫堆,然后呢,在堆空间里边呢,长度为十。数组呢,都造好了,把它的首地址值给了我们这个AR1了,这有个地址值指向了你对空间里边这个数组所有的元素都是零,现在呢,你现在把这个地址给抹掉了。
23:00
改成是闹了,这个指针不就不存在了吗?不存在了你再去找,这不就空指针吗?哎,形象点理解啊好,我把这个呢给主使掉了。因为我不注释,那我下边这个就走不了了是吧。哎,我这呢再去啊,演示一种场景,对于二维数组来讲。哎,我这写一个三,我这写一个二。写个二啊好,然后呢,我去打印一下这个AR2啊,这我写个零,我这写个一吧。这时候没问题吧?哎,零。哎,零啊,这呢是可以出来的啊好。怎么着就控制帧了呢?对,我把这个二呢给去掉了。哎,那么这时候呢,我们再来。你看你看,这时候又是控制针。对吧,哎,这个呢是第28行,哎,就在这一行出现的。哎,这个场景,哎这呢也一样的道理啊,这个我们要画图的话呢,其实咱们前面也画过啊。
24:05
哎,这是站,这是堆,这个呢叫A2啊,然后它呢有new的东西啊,是在这儿的元素呢有仨。哎,手地值呢,也给了我们的AR了,也能指过来了,这是没问题的,只不过呢,这些位置。对,他们又是一个一位数组,你这呢没有指定说明呢,它这块都是no哈。对,都是no,那么在这种场景下呢,你非要找第一个啊,这个位置呢,再往下去延伸的那个数组,这没造呢,还。这个指针不就没有吗?哎,这不就控制帧了吗?要想不出现呢,你只能是说。比如说把这个位置你给他扭一个是吧,长度是几呢?都是次要的啊,关键你得拗出来,这个时候呢,它就有一个地址给他了,这时候再去调不就不空了吗。啊,这就不空了。哎,但是呢,你要说我这个位置我写成一了。这是我要运行怎么着了?
25:01
对,是不是就越界了。哎,我这有一个元素,你这边找第二元素是没有。没有,那不就越界了吗?别蒙了啊,越界跟控制针别整串了。啊,这个我把它呢注释一下啊,说这个呃,此行代码不存在时。呃,然后呢,下一行代码啊。哎,出现控制针异常啊。好,这个呢是我说的这个叫情况二啊呃,其实呢,我们在数组这块呢,典型见到的就是这两种情况,然后还有一种情况呢,大家不太常见啊,我把这个呢也稍微的列一下啊,这种场景呢,准确来讲就是我们后边面向对象的时候,大家会遇到的。我一个string形的一个数组,这个呢,我只能一个,呃四几都可以啊,然后呢,我现在呢,去挡一下这个A23啊零吧。哎,我把上面这个整个给它注释掉啊,这个会控制针吗。不会吧?
26:00
对,打赢的结果呢,是。No是吧,哎,这块是个no好了,诶这个呢是个nor,它呢是一个引用类型的变量。或者我们准确来讲呢,它其实就是个对象了啊,这个对象呢,现在是不是没有具体的值啊。是个闹是吧,在它是闹的情况下呢,你非要调它里边的一个功能哈,比如说呢,就调一个to string吧。哎,在闹的情况下呢,你去调里边的功能了,它也会控制针。这个呢大家可能不太懂,这个呢,就是咱们后边啊,下一章讲面向对象当中典型的控制人的场景。对象调方法,对象调属性,对象没有值,那就是no,一调就控制帧。啊,只要呢,在面向对象里面出现这样问题,都是这个原因。哎,大家呢,先感受一下就行了啊,但是呢,整体形上来看呢,还是像数组的,所以我就也列到这儿了啊哎,整个呢,咱们这一章大家出现控人的场景,你出不了我这三种情况。
27:04
总有一款适合你是吧?那么我们讲它的目的呢,不是让大家下来呢,你咔咔一血来个控制人,你看多帅是吧?你是要避开这样的问题的啊,那也就意味着我们讲它的意义呢,就在于说如果出现控制人了,出现脚背越界了,你得知道什么原因造成的,得会去排这个错误是吧。所以下边问题就是说,如果出现异常怎么办呢?哎,首先啊,这个我们说的第一个问题。别慌是吧,那个啊,第一个问题说啊,一旦程序执行中。啊,执行中啊,出现了异常,那么这个程序呢,就会终止执行啊。这个呢是很明显的,所以呢,刚才我在这个演示的过程当中哈,我演示下边代码的时候,我把上面的都给注释掉了啊,因为一旦呢要出现异常了,下边也不执行了啊,这是第一个问题大家要清楚的,诶这个事儿的话,我们讲到那个第九章的时候还会再说哈,诶那么下个问题那出现异常了,比如控制量,那怎么办呢。
28:07
你不能盯着他看吧?对,这时候注意啊,回过来改代码。啊,有同学说这这这太简单了,这我还不知道改代码吗?我怕你后边呢,你直接去试图去加叉开始是吧,我就加叉开始后处理一下,然后说句话说不好意思出现异常了。别这样啊,那你最终问题不是还是出现了嘛,是吧?诶所以这块呢,你得啊出现异常了,要回来改代码啊,针对于啊异常提供的这个信息啊,然后呢,修改啊对应的代码。啊代码啊,然后呢,避免啊异常再次出现。哎,就可以了,所以这个异常信息这块呢,你看很明显啊,它这个异常啊,哎,这呢是一个线程,一会我们会讲啊,没方法,其实就是个线程啊,它呢是出现了一个这样的一个异常。这个异常呢,这个原因是它注意这个信息呢,咱们在GTK17里边有啊,如果你要是用的GK8呢,这个信息是显示不出来的。
29:03
啊,他就是后边呢,有一个版本,我记得是11吧,诶做了一个优化啊,给大家加了点信息,然后呢,后边还告诉你说呢,你是在你的这个代码的这个类的是吧,这个方法里边的。啊,然后呢,这一行出现的啊,写的呢,其实是很清楚的。啊,这个以后呢,大家看到红色的时候呢,你也不用太紧张啊,啊,你应该呢,一看到以后呢,你说哎呀挺好的,给我报出来是哪一行啊是吧。诶,然后你具体的去看一看就行好,那么这样的话呢,咱们整个呢,这一章的内容呢,就结束了,诶重点内容还是一维数组的使用,一维清楚了,二维呢,本身我们说也没所谓的二维,就是一维呢,就套了个一维的是吧?诶所以呢,基于一维你再去看二维,下边这些呢,其实就是一些常见算法,大家就多练练就行,哎工具类啊,跟这个异常啊,这块其实也不太难。啊,这就是我们整个呢数组的内容,但我们后续章节当中,咱们还会见到数组的身影,到那个时候呢,我们遇到哪个,咱们再练一练啊。就可以了。
我来说两句