00:00
大家好,我是海波老师,我们继续给大家讲解Java中的常见异常,我们这里呢,把这个程序呢,我们拷贝一个新的,然后呢,我们点击OK,把这个改一改。把里面的代码啊,咱们全都删掉啊,咱们全都给它删掉,然后呢,把这个呢,我们去掉好,去掉以后呢,我们就写上它啊,咱们来写上我们的三,因为我们就要讲第三个异常了,第三个异常呢,我们讲解一下咱们之前数组访问的时候的一个异常,咱们叫做索引越界,什么叫索引越界啊,咱们之前说过我们的数组啊,在构建的过程中,其实它就有个容量的概念,对不对,所以我们写上它,我们写上这个东西,我们叫做什么呢?三,好了,你写完以后,这个三呢,就表示你当前的这个数组对象啊,它的容量为三,也就意味着它里面最多只能放三条数据。所以呢,我们这里写上我们叫做names啊,然后给他一个零,然后呢,等于我们的张三好了,那写完以后,我们再写上一个一,好呢,我们写上它,我们叫做李四好,再来我们写成一个二,然后呢,写成一个我们的王五行了,改完了之后呢,学们记住了,这个没有任何的问题,你运行,你运行之后,你会发现这是对的,但是如果你再写一个的话,写成一个三,你写上一个我们的照六,同学们这就不对了。
01:13
不对的原因在于我们的速度的容量就三个,你的012,这已经够了三个了,你再放第四个的情况下就放不进去了,所以我们给大家运行,运行以后我们看结果,你会发现我们当前就出现了一个叫array index out of bound,这个就是我们的速度的索引越界。这个呢,其实也是我们的runtime exception,就意味着在运行过程当中,我们就有可能出现这样的错误,但是呢,这个错误呢,我们不用做任何提示,只要出现这样的错误的话,你通过编程的手段是可以解决的,为什么呢?因为它没有索引三呢,所以怎么办?所以我们写上它,咱们叫做if,如果我们的names点我们的长度,那叫速度的长度,如果它等于我们的四,那么你可以这么写,对不对,这么写就没事了,所以我们运行一下,运行以后看结果你就会发现我们当前情况就没事了,对吧?你通过程序的判断就可以做到,所以啊,这就是我们一个索引越界的一个错误,不光是我往里面放数据,包括我往外取数据也是一样的,来,我写上一个我们的for循环,写上了以后,我们这里写上它叫int I等于零,I小于我们的五,然后呢,写上一个I加加,然后呢,我们就写上它我们的打印,打印以后呢,我们的names,然后呢写。
02:34
看一个中括号,给它一个I,我现在呢,我们去运行一下,看结果,你会发现我这么写对对的原因是因为我们当前的速度的索引根本就不可能到达三和四,为什么呢?因为零到五的话,它的索引范围是01234,对不对,我们这里根本就没有三也没有四呀,所以从这个角度来讲的话,你访问数据,它照样会出现我们的索引越界。那怎么办呢?我们说了这种错误呢,我们都可以通过编程的手段解决,我们把这个五啊,我们写上叫names点我们叫lengths,你这样写的话,它的长度是多少,那你小于它不就是它的索引范围吗?所以说你这样的话就解决了咱们的问题,所以我们张三李四王五不就出来了嘛,对不对,同学们就是这个道理,好了,这个呢,我们说一下就可以了,因为咱们之前呢,给大家讲数组的时候,我们说过这个问题啊好,我们再说我们的第四个,第四个呢,还跟这个越界有关系,只不过咱们说的是自无创它的索引越界,诶老师这什么意思呢?是因为啊,咱们之前讲这个周串使病的时候,它的底层呢,也会有数组的概念,对不对,它只要有数组的概念的话,它都会出现同样的问题,所以同学们,我们来写上它,我们叫做字符串S,它等于ABC,好。
03:47
点完了之后,大家看一下我们的字符串呢,它有一个方法叫做点can at,这个at呢,就给它传个索引,我写个零,写个零之后呢,我们打印一下,你就会发现当前的这个情况,我们运行运行以后啊,看一看,哎,我们把第一个字符不就取出来了吗?叫做A,但是呀,同学们,它是零,它是一,它就是二了,那好,如果你写个三呢,如果你写个三的话,我们运行之后你会发现它还是会发生错误,只不过它叫做字符串的所引越界,对吧?所以它还是我们的索引越界,诶老师呀,那这个是什么样的异常呢?大家想想这个是不是也是我们的运行期的异常啊,因为我们完全可以根据我的长度来判断我们能不能使用这个索引吧,对不对,同学们,这个我相信没有任何的问题,除了这个以外,我们之前字符串中啊,只要跟索引相关的都会存在同样的问题,这里我们还要给大家讲一下,就是说我们的周串底层是我们的宿主啊,所以呢,我们通过索引的方式会发生错误。但并不意味着所有跟索引相。
04:47
相关的操作都会出现错误,比方说把这个注掉,注掉以后,咱们这里写上它叫s.subs string,这个s.subs string叫截取子字符串吧,诶所以呢,我们给它传一个索引是没有问题的,那这里呢,我就传个三,那么012,诶没有三呢,你没有三的情况下,我们这里来,我们直接给他打印,打印以后我们看结果,咱们运行一下。
05:13
结果没问题啊,同学们对不对,哎,老师呀,那我给个四行不行呢,所以呀,我们再来运行,运行以后看结果。你会发现这时候就会出现错误对不对,也就是说我们截取字符串的时候,这个索引啊,如果大于它的长度才会出错,如果没有大于它的长度是不会报错的,即使他没有也不会报错,所以啊,并不是说啊老师012没有那个三,你写三就报错,不是的,这个方法呢,它的大于了它的那个长度,它才会发生错误,所以啊这就比较特殊了,这些东西啊,就需要大家用的时候呢,注意一下就可以了啊,这就是我们所以越界的相关异常了。
我来说两句