00:00
这一小节呢,我们来学习一下异常,异常呢是在程序的执行期间出现的一个问题,我们呢,也可以简单的把它理解为啊,它可能就是一个啊这个bug,然后这个时候呢,我们查找排查排除异常的时候呢,通常的一个调试手段呢,就是这个呃,通过这个debug,然后或者说呃,梳理这个程序的这个运行,运行逻辑啊来找到啊这个异常就是产生的一个原因啊异常呢,它叫翻译,它的英文呢,单词呢是这个exception exception呢,它是微软封装的一个比较基础的一个呃对象,这个对象呢,它用来描述这个异常的一些具体的一些相关信息啊这这个exception这个对象呢,就是用来干这件事情的。然后他会告诉你啊,你是哪个地方报错了,然后会给你一些比较关键的报错信息啊,它会提示给你,然后常见的一个异常呢,就比如说啊,我们来看下面这张图,就是在我们使用数组的时候,非常容易出现的一个问题,就是数组越界,比如说我们下下图呢,有0123这四个元素,那么这个时候它假设它的总长度,总总长度呢只有四,那么这个时候我去呃访问第五个元素的时候。
01:35
他就会立马报错,因为就什么第五个元素根本不存在,然后这个时候呢,你再去访问他的时候,那计算机不知道该怎么做了,这个时候他只能就是说,呃,被动的抛出这样的一个异常来,告诉开发者啊,你不能这么做。OK,然后我们再来看一下,就是异常的话呢,怎么样去处理,它在微软的这个官方提供的,呃,一个结构块里面呢,它会提供了这样一个处理,就是这个TRY块,然后这个catch finally,然后还有一个我们主动可以抛出一个异常,就是through啊这这几个。
02:20
关键字这几个代码块,我稍后呢会敲代码带大家去了解一下,然后我们先来了解一下这个这几个块各自有什么作用,TRY呢,它标识了一个可能会出现呃异常异常代码的这样的一个代码块,然后呢,通常踹块后面呢,跟着基本上就是一个catch块,Catch块呢,就是说在踹块里面出现的问题会被catch捕捉到,然后catch里面呢,去写一些补救的一些措施啊,大概是这样,然后这个finally呢,它主要的作用就是呃,在catch块的后面,它就是最终一个兜底的一个呃一个代码块,就是说无论你踹块和catch块执行的结果是怎样的啊,Finally他都会去执行。
03:14
然后through呢,它就是一个呃,我们主动的,我们开发者主动的一个抛出异常的一个关键字,通常在这个关键字呢,在初级和中级工程师当中啊,使用起来话会非常少,一般会在程序设计,底层设计的时候,可能会用到这样的一个关键字,一般写业务代码的话,是不会去主动去写through的啊,大概是这样。啊,也不排除其他情况啊,这个视具体情况而定啊好,我们来看一下啊,代码怎么去写好,我们到了这个visual修studio这个时候呢,我们先手动去啊,写一个写一段异常代码,然后看一下大家怎么去理解。
04:09
这里呢,我声明了一个长度为三的这样的一个数组,然后呢,这个数组里面啊,每一个元素我都给一个一。啊,这个智能提示就非常好,那就这么写好,这个时候呢,我想去直接访问输出第第四个元素,好大家可以看一下,就是这段代码呢,在这编写之后,然后我们再点右键去编译它。都是可以正常编译通过的,但是这这段代码是一定会报错的啊,所以这种代码呢是非常危险的,这个时候呢,大家可以看到这个exception啊,这这个就是我们抛出的异常,然后这个异常异常里面呢,它会告诉你啊,你的索引呢越界了,下面这段话的意思就是索引越界了,然后因为就是说你的长度只有三,你的放呃你的你你只有三个三个元素的长度,结果你要访问第四个是一定访问不到的,所以它会告诉你啊,你的index越界了,超出了它的总长度啊大概就是这个意思,这个呢就是啊异常的一个描述,然后这个时候呢,我们再来看一下啊check case怎么去使用这个是这这段代码呢,我们我们一知道他一定会报错,这个时候我们不希望它报错,怎么办?
05:51
啊,除了啊修改这个这个R的时候,瑞的那个呃,Index之后呢,它还有一个一个用法,就是也可以用这个check check catch呢来进行捕捉,捕捉它的异常,然后我们呃在这里就是打打出这个TRY的英文单词,然后按一下table,它会自动的帮你生成这个try catch的这个快啊大概这样。
06:20
接着呢,它这里会有一个through的这样的一个关键字,然后我们先运行一下,我先不讲。你看啊,结果这里,结果这里出现的这个这个问题,我用了拆开怎么还是没有用啊,因为这里它有一个主动抛出异常的这个关键字,这个就是through,这个时候呢,我们把它去掉。啊,我们先把它注释了,然后呢,我们说出一句话啊,数组越界了。
07:01
啊,这个时候呢,它就不不会报错,这个呢,就是through的作用,然后我们再我们再从头开始看,TRY里面是就是可能出现问题的代码,就是写在这个踹块,然后catch块呢,就是我们啊做的一些补救的一些措施啊,大概是这样。然后我们再来看一下这个,呃,Finally finally,它是它是一个什么作用,他们的一个语法结构呢,就是大概是这个样子。然后finally里呢,我我们再写一句话就是嗯,操作结束了啊结束了结束。好,我们这时候再来打一下断点看一下。一开始呢,我们先进入到了这个数数组的这样的一个初始化,给它里面填充值,然后这个时候我们开始走这个异常代码,然后进到这个呃,Catch块,Catch块里面呢,就是我们写了一个这样的一个补救措施啊,就直接提示不让他报错,告诉计算机你该怎么样去做,就是当遇到一些踹块里面遇到问题的时候,你就直接在开块输出这一段话即可,然后计算机知道怎么做了,那他们那他就可以继续往下运行。
08:30
这个时候呢,他要遇到了这个finally这样的一个代码块,然后呢,我又告诉他要提示别人啊,这个这段这个事情结束了,好这个时候他在输,输出一个结束,然后整个流程走完。是数字数组越界了,然后结束了啊,这个呢,就是这个try catch finally的一个大概的一个使用过程,然后啊,大家眼尖的小伙伴呢,也会看到这个catch块里面会有一个这个exception啊,这个这个就是这个exception的一个描述对象啊,它是异常描述对象啊,然后我们来看一下这个异常描述对象里面有什么东西啊,大家可以看到啊呃,这里面的东西很多啊,初学者的话呢,我先给大家介绍两个啊,就是一个一个是这个啊message就是他报错的一个具体内容,还有一个呢,是这个呃,对战的一个追踪信息啊,这个东西呢,先告诉大家,我们先呃了解一下这个message,这两个东西呢,是同等重要的啊。
09:40
我们先来看一下这个,呃,异常描述对象里面有什么东西。啊,这个时候我们输出一下这个这个内容,大家可以看到这个这个异常描述信息呢,它是一个这个呃一个一个呃,String类型的一个呃一条消息,然后这个时候我们来看一下这个异常描述信息里面包含了什么。
10:09
在大家可以看到,就是我们可以是可以直接拿到啊,这个异常的信息描述的大概是这样,然后再就是刚刚所说的这个对战信息,对战信息的话呢,可能对于初学者来说比较比较晕啊,这个呢,先告诉大家有这个东西,等后面啊,再和大家详细讲解它的一个作用,这个东西呢,它会大致的告诉你啊,你的代码在哪一行出了错误。第13行对吧,我们我们我们往上数是吧,七八九十十一十二十三十三行,13行报的错,因为就是我们在这里去这个数组访问越界了,然后他就会爆出这样的一个问题,这个呢,就是这个对战信息的一个简单的作用啊,当然随着后面的一些高阶的用法啊,它的它的重要性呢,也会越来越高啊,这一节呢,就先跟跟大家讲到这里。
我来说两句