00:00
嗯,那面向对象这个内容讲完以后呢,咱们接着往下看,今天呢,咱们的重心就是讲叫异常处理,诶异常处理,那面向对象的话呢,其实整个讲起来的话呢,应该从这个难度上也好,或者从这个细节程度上来讲,还是这个有要求的,或者这个难度会比较高,相当于达到一个高峰了,然后呢,接下来呢,后续的这个异常处理,包括我们Java基础这个高级部分的这个内容呢,其实相较于面向对象来讲呢,是要简单一些的,大家呢下来呢,可以再通过咱们讲解后续的内容,把这个面向对象呢整个再整合整合,哎,通过后续的使用呢,不断的去体会面向对象的这些编程的思想和这些实现的细节,啊,那今天呢,咱们主要来说一下叫异常处理,把这一章呢,咱们也归到了说Java的这个基本的这个语法当中了,是因为呢,这个我们写程序代码的时候呢,基本上你不可能说不出现一些异常的,那么不同的语言呢,它怎么处理这些异常,它都会有一些规定,所以这呢,我们也看作是一个语言的一个基本的部分,好这。
01:00
那我们就看一下这个异常处理的结构。这一章的话呢,相较于咱们前面讲解的这个面案对象呢,这个难度上呢降低了,其实知识点的话呢,也非常的清晰,虽然说这个内容是新的,也没有见过,但是呢,难度呢,其实没有那么大。啊,那咱们主要讲解的这样几个内容,第一个异常的一个概述和异常体系的一个结构,诶第二个呢,叫常见的一些异常都有哪些,第三个呢,就是异常处理的机制,提到了两个,一个呢叫try catch finally,一个呢叫throws这样的两类,诶下边呢,又提到说手动抛出异常叫throw用户自定义常这样,那么我们这一章呢,讲的事儿就长帧,就讲这六个事儿,这六个事儿当中呢,像第一个呢,这就属于概述性质的了,没有一些核心的代码了,那下边呢,从二到六这呢,里边就体现了一些代码。那我们更关心的还是这个代码上的一些体现了,所以呢,我们讲解的话呢,在说完这个事以后,后续的就是诶体现这五个问题就行,我们就按照这个顺序把这五个问题说完了,那这个异常处理呢就结束了,就是完全按照这样的一个顺序来好,首先的话呢,我们先来看一下叫异常的一个概述和异常体系的一个结构。
02:14
行,这呢首先有一个引入,说咱们呢,在做这个程序开发的时候呢,说程序员呢,都想着把这个代码呢写的尽善尽美。但是呢,这个尽善尽美这个事儿呢,其实它是一个极限,对吧,永远我们不可能达到这个点啊,就好比是呢,我们要追求说这个人类的这个共同富裕,追求这个共产主义,它是一种美好的愿景,这基本上是很难达到的啊,是这样的一个情况,但是我们也要追求是吧,只要有梦想啊,呃,梦想呢,就是追求的尽善尽美,但实际上可能有困难,那这个困难都体现在哪些方面呢?因为呢,有些问题呢,不是咱们单纯靠代码就能够去规避的,比如说客户输入的数据格式不对。你代码写的感觉挺好的,但是呢,用户呢,诶非不按你的来,你让他输入一个,他非给你整个字符串。
03:02
啊,那么读取的文件不存在,我们呢,想从本地去加载一个文件,结果这个文件呢,本来一开始还在都能执行,结果后来呢,被别人给误删除了,别一删除你再去加载代码呢,其实还是那个代码,但是呢,因为文件不存在了,又出问题了啊已经呢说网络呢,是否保持通畅,这个都在有网络的情况下呢,比如咱们用飞秋给大家传文件都没问题。哎,这个人家飞球写的也挺好的,但是呢,这个把网关了,后边交换机关了,交换机一关网络通就不通畅了,阻塞了,这个时候呢,你再发接受不了了,这都是有一些这个外部原因导致的,我们这个程序呢,可能会出现一些异常的情况,那咱们呢,就相当于得去解决这样异常情况出现的话呢,该怎么办这样的问题,这就是我们要讲的叫异常的处理。诶异常的处理,哪怕呢,比如说这网络中断的时候呢,我们出一个提示框,说这个此时网络不通畅是吧,建议呢,你换成其他的方式进行一个传输,或者建议呢,你稍后这呢,也算是一个比较友好的一个提示,这就相当于它出现相应的问题以后呢,我们的一种处理措施啊,这样的情况就是你要不处理的话呢,这个事其实不是特别好啊,这个原来呢,大家可能没有做过软件开发啊,比如说呢,你这时候登录一个网站哈,这个网站有可能人家后台处理的业务啊场景啊,其实非常复杂非常好了,但是呢,就是由一个小的bug呢,没有及时考虑到,你呢,一登录这个网站,突然这个页面呢,就一堆乱码,或者你登录一个手机的APP也是一样啊,诶一点开呢,一堆乱码出现了,这个给用户的体验呢,是不是很差呀。
04:38
对,他有可能是一个非常微小的一个bug。或者说对于一个普通用户来讲的话呢,它呢有有两个两个应用吧,两个APP,然后打开这个呢,人家页面做的特别炫,打开这个的话呢,就写的比较简陋,图这个颜色的话呢,也比较low一些,但有可能人家的后台做的是比较好的,但是呢,我们给用户的第一印象呢,就感觉人家这个看着好像好一点似的,嗯,以及呢,说你这个程序呢,可能写的特别好,但是就有一个小的一个bug没解决,用户一点那个按钮呢,突然爆了一堆乱码,或者直接闪退了,这个对用户的体验就很差,他下一秒要做的事情呢,就是把它卸载掉是吧,那大家都有这样的经验了,其实呢,这个小问题呢,你是可以给他规避掉的,如果出现这样问题了,提前你想好啊,确实出现这个情况了,比如说你给一个友好的提示说,比如说呃,网络正在维护啊,请稍后再试等等,哎,这块呢也算是有一个提示,那用户呢,可能就啊理解你这个事了,你要给他报一堆乱码,这个对于普通用户来讲,他是很难接受的。
05:37
啊是这样啊,那我们还是需要来考虑这个异常情况出现的时候呢,该如何去处理的好,那我们再接着往下讲,那么既然呢,我们提到说程序执行会出现这样的一些问题,我们把这些问题呢,都统一的归成叫异常。异常呢,就是不同于正常的情况下叫异常了,那异常说在Java语言当中呢,我们将程序执行当中发生的不正常的情况就称作叫异常,这里边呢,先明确指出来,说你写代码的过程当中,你写个语法错误了,比如写这个static,你S写成大体了,这个不叫异常,这是你自己这个语法的错误,包括呢这个逻辑问题的错误,比如说我们求这个质数的输出,里边呢,这个我们应该是小于等于这个开方的这个事,你这个等号忘忘写了,这个也不算异常。
06:26
这个是你自己逻辑没捋清楚。啊是逻辑没理清楚这些问题呢,不算到我们这个异常里边,那你要那算的话,那那异常的包的也太多了,这这个都不算啊好,那么具体的来讲,我们Java当中这个异常都包括什么呢?这呢举了两个情况,第一个呢叫做error,第二类呢叫做exception。那error和exception有什么区别?首先看error,说error呢,就是Java虚拟机无法解决的严重问题。
07:00
就是咱们的程序呢,分为两个过程,叫编译过程和运行过程,诶尤其这个运行的时候呢,我们需要用Java虚拟拟的,先是加载器,然后呢,再用解释运行器帮我们去解释运行,那真正在这个运行的过程当中呢,Java虚拟机都没办法帮你解决了,比如说虚拟机内部出现问题了,它自己就挂了,你让他帮你去解释运行,他自己就挂了啊然后呢,资源呢耗尽。这个障碍虚拟机呢,去帮我们去分配内存空间,占呀堆呀等等,结果呢内存都不够,你想让他去解决,它只能是没有用的垃圾去回收你这些资源呢,全都有用,全都用,他也不敢回收,结果呢导致呢资源耗尽,这个内存溢出,这个呢也是他没有办法去解决的问题。像这些问题呢,比较严重,咱们呢,都把他们归作叫error这个层面啊,比较严重,那么这些问题我们能不能去解决呢?这个解决不了了,除非你改代码,就我们希望在这个已有的代码的情况下,不改代码的时候呢,你加入一些怎么去修改啊等等,这个是不切实际的,所以我们把这些问题呢,写了一句话说不编写针对性的代码来进行处理啊,这呢叫严重的问题,叫error,那也简单的给大家稍微举一下例子,我们在这里边去新建一个测试啊,叫error的一个测试,诶首先呢,咱们刚才提到了,说这个什么是error呢?就是Java虚拟机都无法解决的严重问题。
08:33
对扎va虚机都法法解,无法解决这个严重问题,然后呢,主要呢,我们这个需要理解的一个点,就是说我们没办法去编写针对性的代码呢进行处理,这个呢是需要注意的,那我们这呢,写一个没方法,像刚才呢提到了说这个资源耗尽的问题了,咱们前面呢,其实也见过说战一出占一出,能举个例子吗?对递归调用就会写个最简单的,我直接may里边呢就调魅。
09:02
这样是不是就会出现了。当我们通过这枚方法进来又调查自己的时候呢,这相当于你又调了一个方法,我又得像传一个,相当于你把这个所谓的你这叫行参了啊,但是我往这放的话呢,你相当于有个实参一样,又翻过来付给一个新的一个这个行参了,翻来覆去的这样去调,已有的这个呢,还清除不了,那内存里边就是这个呢,需要又调用一下它,它呢需要调用下它依次往上垒,这个as呢,永远呢,这个不会去销毁了啊,然后导致呢,很快的就溢除了。这呢就出现这个问题,那像这个呢,他就报的那个叫error,那这是咱们说的第一个问题,这呢其实叫战一出。占移出叫stack overflow的一个error,这是栈结构这样一个情况,行,那我们这呢注释掉,我这呢还可以再去演示一个叫堆的一个移除的情况,比如我这呢去建一个数组。
10:09
你建个in也行啊,这1024,这呢,咱们一个呃,Int的话呢,你知道这个一个int一个位置相当于是一共有四个字节了,那那就是一个位置四个字节,我现在写了1024个,那就1024个四个字节,然后我现在呢,这个还不够,再乘一个1024,再乘一个1024行,那我们这个new的结构呢,是在堆空间当中的,那你这时候呢,如果这个空间过大堆呢,是不是就也可能不够了。哎,也挂了,这个呢,我们叫auto memory的一个error是吧,叫简称呢,叫OM,对这个auto memory后边呢,就是你这个堆空间,这个space呢,Out out了。就是超了这个意思。行这个啊,CTRLC一下,那这个呢,其实是我们这个堆溢出了,那这叫简称呢,叫oom啊,这个情况行详细的关于这个问题的话呢,我们后边讲GM的时候呢,再给大家去说啊,包括呢,我们去如何去调U等等,那这呢,我们就先体会一下,这两种呢,我们都叫做error,实际上呢,很好区分,你就看后缀,后缀呢写的是error的,那就是这个error,而且呢,像这种情况呢,我们就不编写针对性的代码进行处理了,像这种情况不在咱们今天讲解的处理范围之内。
11:31
啊,那你要出现这个问题怎么办呢?出现这个问题,那你就只能回过来改代码呗,错了就改代码,这样行,这呢是咱们说的这个叫error,然后除了error之外呢,剩下这个呢叫exception,这个exception呢是咱们今天重点要讲解的啊,这个叫例外except exception例外是吧?其实这个呢,是我们平时呢,把这个结构,虽然说咱们把它俩合起来叫做异常了,但这时候这个异常呢,你可以理解成是一个广义上的一个异常,加上双引号,广义上就是不正常的,我都叫做异常了,是这个意思,但又由于呢,咱们这个异常呢,咱们又不处理,所以呢,导致咱们平时写代码,其实一说异常一说异常,实际上咱们说的呢,异常处理说的都是他,你可以把这个呢,称作叫一个狭义上的一个异常啊,就咱们平时说的叫异常处理,包括这一张呢,叫异常处理,咱们这个异常呢,都是狭异常的,也就是说呢,只针对于这个exception的处理。
12:27
好,那看exception exception呢,说其他呢,因为编程错误,或者是偶然的外部因素呢,导致的一般性问题,可以呢,使使用这个针对性的代码呢,进行处理的了,这个是可以处理的,所以咱们这一章呢,才讲叫exception的一个处理,那比如说呢,控制帧,咱们都见过试图读取的文件不存在网络连接中断,数图角标越界等等,那这些呢,我们都称作叫exception。哎,就都称作上叫exception,先有这样的一个概念。
我来说两句