00:00
好了,那咱们接下来继续再往下看吧,来,我们创建个class exception test0。啊。呃,那么这块我们要看一下什么呢?就是还是看这个try catch,各位啊,这个TRY呢,其实还有个子的语句块叫什么叫finally。有个叫的各位啊,咱把这个看一下。Finally,这个finally。这个啊。看一下关键字。关于try catch中的finally字句。Finally词句。首先呢,我在这里先说明一点,各位啊,在finally子句中的程序是一定会执行的。注意啊,在finally子句中的代码是最后执行的,并且是一定会执行的。
01:10
啊。即使什么呀,即使TRY语句块中的代码出现了异常。我们的finally语句也会执行。啊,那么finally语句呢,它是。用在哪儿呢?对吧?哎,Finally语句通常使用在哪些情况下呢。这个finally表示最终的一定的,一定会执行的finally,最终的啊,不是final,各位啊,Final是个关键字,现在这个叫做finally。啊。那么放在这个这个finally try catch1起用啊。得和TRY开始一起用,首先这是第一点啊,Finally子句中的代码是最后执行,这一定会执行,即使TRY块中的代码出现了异常啊,Finally子句必须和TRY一起出现。
02:12
啊,不能单独编写啊,不能单独编写,那么它在通常是在哪些情况下,来举个例子啊,举个例子。呃,比如说吧,我现在呢,在这里呢,File input stream等于一个file input stream好出来啊。溜出来之后呢,这边呢,我随便呢写一个文件。这个文件呢。随便来一个吧。来,来个斜杠啊,来,随便选个文件的路径拿过来啊,放到这儿。好了,那这样的话呢。这行代码我就写完了,各位啊,写完之后呢,你需要对这个异常进行处理啊,要么TRY开,要么throw是不是,哎,TRY开好在这儿呢,我们加一个finally。
03:07
啊。这个这是个什么呀,这是个流,各位是吧,这是个,这是个输入流吧,这叫创建什么呀?输入流对象啊,输入流对象,然后代码在执行过程当中,它可能怎么着啊去读对吧?哎,那么接下来再往下呢,可能有一个代码是这样的说。嗯,S等于空,S调to string方法大家都知道,这个一定会出现什么呀,叫做空指令异常是不是哎。就这里啊,一定会出现什么呀,空指针异常。然后接下来我可能在这个位置上注意啊,流使用完。需要关闭各位啊,因为流是占用资源的。明白吧,啊,因为流是占用资源的,那需要关闭,那么这个时候我在这儿关闭,好这个地方有异常,各位啊。
04:05
Close方法有异常,你看IO异常吧,是不是,哎在这块呢,我们catch一下啊,Catch一个什么呀,叫做。K。开这个I异常,然后呢,E print sta,好,大家看如果这样写会先我先不写finally啊,大家看这样写会有什么问题。就这个程序现在是把流创建出来了,那这边呢,就是开始什么呀,读文件吧,对吧,然后接下来再往下我写这个string s0 nows.to string方法。在这儿关闭这个流有什么问题,各位?思考一下。就我们现在没有使用finally子句啊,就当前这个程序,大家想一想有什么样的问题。出了异常流就不会关闭了,小鹏说的对啊,好,大家思考一下,在第24行这里,如果出现了异常,我们是不是会进到开始优化中执行?
05:08
这行代码是是不是就不执行了。来我们在这再加个cash啊,Cash是一个控制异常行吧,因为这个异常为啥不用处理,因为这是运行是异常对吧,就假如是这回事啊,叫none pointer exception,然后接下来我们这e print打印。大家注意看啊。就是这个流是不是一定要关闭的,流使用完要关闭,因为流是占用资源的。那么也就是说我们这个流必须得关,对吧,即使上面出异常,我们这个流也得关是不是。对吧,哎,即使什么呀,即使以上程序出现异常流也必须要关闭,放在这里就有可能怎么着,放在这里有可能流关不了,明白吗。
06:00
放在这里你流就关不了,有可能因为你这出异常,那个流就没关。你看你出异常,假如说你在这输出一个hello word,你看它执行这个hello word不执行。对吧,来我们在这执行执行这个会不会执行hellokitty hellokitty。来,我们执行一下,大家看这个hello word并不会输出,因为这出异常了,但是hellokitty是不是继续往下执行了,因为try catch是不是把这个异常捕捉了,捕捉之后是不是计划执行了,那导致什么呀,这行代码没执行。下面这个执行了正常,这行代码没执行,就说明这行代码肯定是百分百没执行,这行代码没执行代表这个流用完之后你没关,这将是非常危险的。这将是非常危险的啊。这像是非常危险的,各位啊,所以不能放到这儿,各位啊,我们需要在这个位置上加一个finally。这个流的关闭放到这儿比较保险啊,流的关闭放在这里比较保险,听懂了吗?Finally是一定会执行finally中的。
07:10
代码是一定会执行的。啊,是一定会执行的,即使TRY中出现了异常啊,来fs.close好告诉我这块为什么报错。为什么报错各位,因为这个is是在这个大括号里面,是不是局部变量。那在里这个大括号里边这个is是不是用不了。所以我们是不是应该把这个is这个代码给它放到外边啊。默认值给个空行不行?是不是应该声明位置放到这儿啊,对吧?哎,声明位置放到放到这个位置上啊,声明位置放到什么呀,放到我们的踹外面。这样在finally中才能用,那么这个时候我们直接去close,可能比较比较什么呀。
08:09
可能比较这个唐突啊,因为我们这个是空啊,万一这你没拗成功。然后这个finally语句在执行的时候是不会出现空值异常,大家思考一下,假如你这没有六成功,这个对象没创建出来,那么这个时候这个FS是不是空啊,那进到finally这块当中,Finally空的话,调这个是不是空值异常啊?对吧,你即使是空,你就你是空了,是不是就没必要关了,因为你没有六成,你是不是空了,是不是就没必要关了。对吧,所以你这最好判断一下if那啊,如果这个它是不等于空,你再去关它。听明白了吗?就你这个不等于空再去关啊,这是避免什么呀,避免空指针异常啊,关闭你看放到这儿去关,那雨彤老师这个为什么出错,因为这有异常,IO异常你得处理一下,听懂了吗?IO异常你处理一下,要么在这throws,要么在这拆开,注意啊,这边我们选择拆开继续捕捉就行了,好,这个大家能看懂吧。
09:11
就相当于说我们这块是一个try catch,然后finally finally当中其实就这一行代码,这一行代码需要处理异常,我们再采用捕捉的方式啊。Close方法有异常啊,采用捕捉的方式。啊,采用捕捉的方式,在这捕捉一下啊,处理一下,处理一下。好,这个大家理解吧,就是我们主要是讲什么呀,各位听清楚了吗?Finally语句通常使用在哪些情况啊?通常在哪啊,通常在finally语句块中完成什么资源的什么释放或者是关闭,因为什么呀?因为finally中的代码,Finally中的代码比较有保障。
10:01
那比较有保障。即使TRY语句块。中的代码出现异常,Finally中代码也会正常执行。啊,也会正常执行来,我们看看是不是这样的啊,嗯,这个关闭这块看不出什么效果了,来我们在这个位置上。输出是hello word,当然这个出现控制异常,这个就不会执行了,下边代码就不执行了,进来我们的开始一块中执行处理异常,然后finally当中呢,我们来输出一句话,下边这个是hellokitty。来,我们叫做hello。好客啊,好客,绿巨人啊,来哈,好客来走。我们看那哈罗浩克会不会执行。没问题吧?是吧,哎,没问题,你看空值异常是在第27行出现的hello word没有输出,然后呢,再往下finally块中的hello浩客是不是输出了。
11:01
对吧,哈,浩克输出之后再往下是hellokitty啊。是不是,哎,Hello Kitty,所以说放在这个finally语句块当中,即使上面出现了异常也没关系,Finally语句的。语句块中的代码是一定会执行的,一定会执行,这就是他的一个用法,各位啊,用法。
我来说两句