00:00
好,那我们接着往下来讲,呃,特征七的话呢,也是一个语法改进,这呢提到了这个异常处理当中串语句的一个升级啊,我们看下这是什么意思啊,直接让咱们通过这个代码来演示一下,呃,首先呢,我在这个JDK8基于的这个工程当中,我们写一个代码。好在我们这个包当中,点右键,我去创建一个class。啊。然后出来的一个测试。好,这呢,我们来演示一下啊。嗯,Try catch呢,就是我们异常处理使用的一种方式了,那另外一种方式呢,叫做ROS,那通常呢,我们来处理相关一些资源关闭的操作呢,习惯呢是这样来写的,这呢,我们先写一下啊,这叫叫举例一。好,举个例子,嗯,这呢,我们写一个方法。那test。一好。那我这呢,写一个流资源的一个关闭啊,像我们写代码当中,流资源,Socket资源,包括数据库连接这样的资源都是需要必须要关闭的,那关于这些资源一定要关闭的操作呢,习惯上呢,我们都这样来处理,这呢我举个例子啊,以流啊为例来说明,我这呢去创建一个叫input stream reader。
01:21
啊,这呢是一个转换流。啊,Reader等于new一个啊,Input stream reader这里边的话呢,我传一个字节流叫system.in啊控制台输入好,然后的话呢,我们在这呢写一个TRY。啊,在串语句当中,我们呢,去做具体的这个操作,那串操作完以后,我们这块呢,还得去呃做一个资源的关闭操作,那这个串里边呢,我们还要去执行一些,比如关于这个呃资源的一些方法的调用。啊,关于这个reader的一个调用,比如我们调用他的read方法啊,这呢我只是简单举例子啊,像这个呢,都有异常,那以前我们都习惯呢,这样来处理,把这个reader这块呢,我们先拿走,这呢先赋值。
02:05
哎,为一个no,然后呢,这个reader本身呢,呃,通常我们习惯呢,是在它的串语句当中进行一个初始化啊第二这read方法它有异常,哎,我们这呢,写一个catch操作这里边。啊,报的异常是一个IO的exception。啊,这呢,相当于就异常的进行这个处理啊,这呢就是具体的一个呃,操作流的一个过程啊。哎,或者我们这呢,叫读取数据的过程。那这呢,具体这个过程呢,我在这儿省略了啊,只是呢,拿一个方法调用一下来演示一下而已,嗯,具体的操作肯定不是这样写的,我们需要还做一些循环的调用等等啊好,那在这个开始完以后呢,我们最后呢,需要进行资源的关闭,所以呢,需要加上一个finally。嗯,那这个关闭操作呢,我们保证它是非空的,所以呢,通常加上一个if说如果这个reader。
03:05
啊,不等于no。嗯,这种情况下呢,我们就要用reader点哎close的方法进行资源的一个关闭。那关闭这个操作呢,通常它也有异常,我们呢,再调用一下enter,使用try catch进行它资源的一个关闭啊,异常的一个处理啊。好,这呢是咱们通常习惯上写的话呢,都这样来处理,那在这个JDK8当中呢,实际上有一种相对比较简单的一种处理方式了。嗯,Test。二。哎,可以这样来写,这呢都是咱们说的这个旧的语法啊,怎么来处理呢?哎,我这呢可以写个踹踹,后面呢是可以加一个小括号的,这个小括号里边呢,就比如说写咱们刚才这样的一个流。啊,CTRLC。好瑞,等于我们这呢,给它做一个实例化。
04:01
诶这样呢就可以了啊,然后在这里边呢,我们可以通过这个刚才的啊reader去调用它相关的这个read方法进行数据的一个读取。啊,那有一场我们做一个开始的处理IO的exception。啊,这样就行了,那这时候呢,大家注意我们最后这个finally的话呢,就不用写了。啊,在串小括号当中,我们声明的这样的一些资源,它会自动的进行一个关闭啊,所以这呢,相当于是我们升级以后的写法啊。嗯,举例二啊,是在这个举例一的基础之上。啊,升级的一个写法啊,那不用显示的。哎,处理资源的关闭。好,这呢是我们说的这个操作啊,在这里边的话呢,有一个要求是什么呢?就是要求我们这个资源,它必须呢,得在我们这个小括号当中进行实例化,这呢我们写一下。
05:06
在我们的这个JDK,或者我们叫这个Java吧,啊都可以啊Java吧当中,我们要求这个资源。哎,对象的实例块啊,必须放在踹的一对小括号内。哎,一对小括号内完成,哎,这个呢是咱们JDK8的一个要求啊,而我们这个JDK9的话呢,相当于对它呢进行了一个宽泛啊,相当于在我们这个JAVA9中。哎,在我们这个JAVA9中呢,我们说哎,可以在这个踹小括号中,哎,调用。啊,这个已经实例化的啊,这个资源对象啊,这是我们JAVA9的一个规定啊,那什么意思呢?我先在我们这个基于JDK8的这个版本中写一个代码。
06:10
在这里边怎么写呢,是这样一个想法啊,我上来以后呢,就先已经将我们这个资源对象呢,做了一个实例化,然后呢,在这个踹当中,我直接想调用一下我这个reader。啊,希望呢,他能够将我们把这个资源呢,自动的进行一个关闭,哎在里边呢,我第二下这个read的方法,哎,包括下边这样一系列操作,CTRLC,哎,我们这样子CTRLV一下。啊,这样写完以后呢,我们发现这个时候呢,报错了哈,把光标放在这儿。啊,这呢给我们指明说,当前你这是在1.8的这个版本上,是不支持这样来写的。啊,这呢就指明了这样一个问题啊,哎,那我们在这说一下,说如下的这个操作。啊,说不可能或者要不可以,呃,在JDK这个八及之前的版本中使用。
07:03
哎,这个呢是不可以的啊,所以大家呢,把这个呢,给它注释一下就可以了。那现在的话呢,我们把这个文件啊,CTRLC放在我们这个JDK9当中啊,在我们这里边啊,我这呢CTRLV一下。好拿过来了,拿过来以后这时候呢,大家把刚才我注释掉的这个代码呢,给它打开。好,大家看打开以后的话呢,我们这里呢,就不再报错了。啊,也就是说我们扎VA9呢,就支持我们这样来写,也就是说呢,在我们串当中小括号中这个资源啊,它会自动的帮我们进行关闭,在这个资源呢,呃,这个相当于调用之前它已经做初始化了,是允许我们在上面这样来写的。啊,这是我们要注意的问题,行,那这里边呢,其实暗含了一个知识点,什么知识点呢,就是我们这里的这个reader呢,哎,他做了一个实例化,这个时候呢,这个reader本身要求他其实是一个final的。
08:00
啊,是一个final的,哎,不妨呢,大家也可以这样测试一下,当我们试图给这个哎reader再进行赋值的时候呢,他这儿呢,就报错了啊是吧,他这块就指明说我们这资源呢,是一个final的。啊,因为我们关闭的呢,就是这个资源啊,你不能再给他重新去造对象了,他就不能再去变了,这个时候呢,大家把它注释一下,这里做一个说明,说此时的。啊,Reader。哎,是final的,哎,它是一个默认行为啊,大家呢,就不用哎这个显示的在这块去加上一个final,哎不加也没事啊,不加它也是final的,当然加上也不错。哎,是final的就不可哎再被复制。好,这就我们说的这个问题。啊,这个问题啊,行,那如果说我们有多个资源声明了,那在这个串当中需要引用多个资源对象的时候怎么办呢?哎,我们中间用分号隔开就行了,举一个例子,比如我这呢,写的叫output stream writer。
09:10
哎,等于你有一个output stream writer,这呢,我就简单的写一个system叫out了。哎,这呢也是一个资源,那这个writer资源呢,我们CTRLC在我们这个TRY当中呢,你导进来,它们之间呢,用分号隔开就可以了。啊,那此时呢,这两个资源会在我们执行完这个语句以后,自动的进行资源的关闭啊,也就不需要我们再去显示的做close的调用了啊,这是我们JDK9相较于这个之前的八当中啊,又增进的这样的一个小的特点,是语法层面的一个改进。啊,这呢,就是我们说的这个第七个点。
我来说两句