00:00
大家好,我是海波老师,接下来我们来继续讲一讲Java语法中的错误,之前啊,对平时我们出现的错误呢,进行了大概的分析和分类啊,我们接下来呢,对异常处理呢,我们进行详细的说明,我们这里呢,把程序呢,我们复制一下,我们改个二。好呢,把这里呢,我们改成一个二啊,把这些全去掉,删除掉,然后呢,这边呢我们都去掉,然后呢,它我们也删除掉,好删除完了以后,把这个错误呢,我们改成我们叫异常啊,所谓的异常呢,其实就是程序执行时偏离了正常的逻辑,所以呢,家务的语法呢,提供了相应的补救措施,用于纠正和恢复正常的逻辑,说的简单点啊,就是给你一个机会啊,用于当异常发生时进行处理。那为什么Java要增加异常语法处理呢?其实啊,Java也是为自身考虑,他也不希望开发的应用程序很脆弱,对吧?因为一点的小的错误,小的故障,导致整个应用程序崩溃了,如果Java语言开发的软件这么容易出现问题,这么不健壮的话,那你以后还会用Java语言开发程序吗?我相信就不会了吧,对不对?哎,所以啊,我们Java呢,为了保障自己开发程序的这种健壮性呢,它就需要这种我们的异常处理语法。
01:10
好了,我们把基本的处理语法呢,咱们说一下啊,咱们这里呢,把它写上,哎,我们写上它,咱们叫异常处理语法,那么它的基本处理语法呢,是我们的踹啊,有一个关键字叫做踹,然后呢写个花括号。然后呢,里面写上一个catch,然后写个小括号,再写个划括号,那么再写个catch,然后呢,我们再写上一个它这个catch啊,可以多写几个,可以多写几个,咱们这里呢就不演示了,咱们接下来呢,给它往下走,咱们再加上一个叫做finally啊,这么写个大括号就可以了,所以说你会发现我们异常处理的语法呢,相对来说有点复杂啊,那么说到这个处理的语法了,我们也要强调一下,就是之前咱们提到的异常分类当中啊,咱们BA题的异常呢,必须要明确使用这样的语法或进行其他的处理,如果你不进行处理的话,那么编译器呢,会觉得代码的风险大,是不允许你编译通过的,简单的说啊,就是不让你运行,而运行其异常呢,其实是没有这样的要求的,如果你不进行处理的话,那么其实啊BA器也会让你执行,为什么呢?因为如果你出现了错误的话,你通过编码呢就可以解决,对吧?它并不是很难处理,你解决完之后重新编译,重新运行就可以了,那举个例子啊,数学运算中的那个除数不能为零,对吧?在正常的逻辑中,咱们的数据是不可能为零的。
02:24
但是运算中却出现了除数为零的异常,你是不是只要在计算之前先判断一下咱们那个除数不为零,再做计算就可以了,那么这样的话就不会出现异常了,对吗?所以啊,这种可以通过编码解决的问题呢,我们可以不用异常处理的语法来解决它,如果真正的发生错误了,你写个程序就可以了,大家有这么一种情况,就是正常的数据逻辑,咱们的除数就不应该出现零。如果出现了呢,就说明你前面的数据呢已经出现了问题,如果此时啊,你继续往下执行逻辑的话,系统的风险就会非常的大,所以此时我们就应该用这样的语法来进行进一步的处理,我们希望呢,把问题提前发现,提前解决,你不能说我通过编程的手段把那个问题跳过去了,那你后面出了问题,那这样的话就不是很好了,对吧?问题要提前发现,提前解决嘛,好了接下来呢,咱们就把这个语法呢给大家解释一下,首先我们的第一个咱们叫做TRY。
03:19
这个单词呢,在英文当中啊,它表示的是我们尝试的意思,什么意思啊,你可以尝试着把一些有问题的代码放在这个大括号当中,所以我们说一下,就是可能会出现异常的代码,你给它放置在这个位置就可以了,若我说的是可能会出现样的代码,如果不出现就按照正常的逻辑走就行了,那如果出现会怎么办呢?说一下如果出现我们的异常,那么我们的Java讯机,它会将我们的异常进行我们的封装。形成一个具体的异常类,这个异常类就准确的描述出当前的一个错误场景啊,然后将这个异常抛出。
04:06
看一下我们之前讲过,这个叫做exception,你看看它继承了一个叫throwable能够抛出的这么一个负类,对不对,所以啊,所有的异常都能够抛出啊,这里咱们也说一下,所以呢,我们这里写上啊来,所有的异常对象它都可以被抛出,哎,就是这样,那你抛出了以后,大家想想你是不是得想办法去解决它呀,所以呢,我们接下来咱们说一下我们的todo,我们叫catch,这个catch呢,就是我们当前的这个关键字了,它就叫捕捉。你把它抛出去了,我得把捕捉过来做处理呀,对不对,所以呢,我们需要将我们的异常对象啊,给我捕捉到这个位置,所以我们叫做不叫抛出的异常对象,既然是一个对象的话,你是不是都有引用啊,我们叫对象引用,哎,就这意思了,那么我们这个大括号里面就要写上我们的异常的解决方案,对吧,怎么解决的,你要告诉我,哎,老师呀,怎么有两个cat呢?这个时候咱们之前说过了,我们的异常啊,是有一个什么范围的吧,它有大有小啊,什么意思?我们有的异常的范围啊,它很大,它出现的问题点就可能会很多,对不对,但有的异常呢,它的范围小,它就更具体,它出现的原因啊,可能就那么一个两个的,所以它就好解决,所以我们再去捕捉异常的时候,就可能出现多个问题,那么咱们就需要有个捕捉的顺序,我们一般情况下捕捉的顺序呢,是先捕捉我们异常范围小的,再捕捉异常范围大的,因为越小。
05:39
越具体越好解决呀,所以这里我们说一下,我们捕捉捕捉多个我们异常的时候,我们需要先捕捉范围小的异常,然后再捕捉我们范围大的异常,对吧?有个先后顺序在里面,所以呢,我们就会有多个catch语句老师,那如果我就一个异常呢。
06:01
如果你就一个异常的话,你当然就不需要多个cats对不对,我们的这个多个cats呢,是当你有多个异常的时候,我们才会用的啊好了,接下来我们再往下,下面呢,我们叫finally。这个呢,我们叫finally,什么意思呢?它表示最终,对吧?从英文单词角度来讲,它叫最终,这里的最终是什么意思呢?就表示说我不管你间的代码是有异常还是没有异常,有异常你处没处理我也不管,反正我最终要执行一段逻辑,就干这事用的,所以我们说一下,它就是我们最终啊,最终执行的代码逻辑,我们放置在这个地方可以了,好了,这里把这个基本的语法呢给大家解释了一下,我们现在来演示演示啊来咱们写上它,我们写上一个叫int I等于零啊,写上一个int勾,它等于十,再除以我们的I好了,然后呢,我们在这里呢,我们去打印咱们的勾,行了,运行一下非常简单,对吧?好,运行之后你就会发现我们当前就一定会出现异常了,为什么?因为咱们除数为零了嘛。
07:00
诶,那怎么办呀,你会发现我们当前出现了异常的时候,我们最后的打印语句根本就没有执行到,为什么?因为一旦出现了我们这种异常的话,我们的加热信机就会自动关闭,它无法恢复,那这样的话我们整个应用程序就崩溃了,所以说我们说了加热信机是绝对不允许这种情况出现的,因为你因为这么一个小的一个除数为零的错误,就导致整个应用程序就全都崩溃了,这个也太脆弱了,对吧,所以他就准备了这样的一些语法,那咱们现在就加一下。我们现在写上一个串,然后呢写上一个cat,然后呢写上一个finally对吧?诶就是他,诶老师你这里怎么只写了一个cat啊,因为咱们这里就一个异常对不对,所以我加一个cat就可以了,我就把呀,可能会出现异常的代码呢,我写在这个位置,大家看一下,我们这里不就是它可能会出现吗?所以呢,我写上一个零,我在这样写上一个勾,它等于十再除以I,我这么写不就完事了吗?完这了以后,我把咱们的这个地方,我写上一个我们的异常,那么这个异常呢,就是它这个就是一个我们除数为零的一个算术异常,所以呢,我们这里呢,来给它放到这儿,那么它是一个异常对象啊,它一个引用写个异就行了,那么这个异啊,就表示的是我们抛出的那个异常对象啊,异常对象,那么这个异常对象呢,它就有专门的方法了,所以D它里面有一个叫什么呢?叫做get message,这个我们称之为叫错误的消息,因此啊,大家看一下我们这个消息就告诉你了,它是一个什么除数为零啊,就这个意思,它这里叫一点,我们叫做它这叫错误的原因,其实它都有,其实我们用的比较多的可能还是我们这个方法叫E,我们叫print,叫打印。
08:41
那把他的推荐信息呢,我打印出来,找到错的原因给他解决,因为这样的错误呢,其实说白了我们都可以通过编程的手段来解决,所以呢,我们其实是可以直接判断的,所以这两个方法呢,我就先住掉,然后呢,把这个呢,我们放过来后呢,下面呢有个叫finally,这个finally呢表示的是不管你当前的程序有没有异常,也不管你怎么去解决的,我最终要执行的代码,所以我加一句话要打印。
09:07
然后呢,我就写上它,咱们叫最终啊执行的代码,OK,好了,那我现在就把这个程序呢,我们运行一下,你看吧,我们运行运行以后看结果,你会发现我们当前的程序它就有个零了,哎,我们程序其实已经正常执行了,它并没有异常结束吧,只不过在咱们执行过程当中,他会告诉你我们出现了一个除数为零的错误,我们没有解决,其实我们捕捉以后呢,应该做一些特殊的处理吧,我这里为了简单没有做任何的处理,你这里呢,完全可以把这个I呢,给他一个十嘛,然后呢,你再重新给他做计算,这不也可以吗?所以呢,我们写上十代除以我们的I不行了吗?对不对,这就是一种解决方案,现在有很多种,咱就不去演示了,所以我们这里运行一下,运行以后看结果,你会发现我们当前诶结果不就是一吗?所以啊,这样的话就会让我们的程序呢,更加健壮一些,否则呀,之前那种写法呀,我们的程序太脆弱了,对吧。
10:03
好了,同学们,这就是我们Java中异常处理的最基本的语法操作。
我来说两句