学习异常处理-自动关闭资源的try语句块
作者:互联网
/**
六 java9增强的自动关闭资源的try语句块(java7事实上已经有了自动关闭try语句块)
写法: try(){}-catch-finally
综上:需要关闭的资源,数据库连接,网络连接
1 要么在小括号里声明且初始化(java7)注意'且'字
2 (推荐)要么在try自动关闭语句之前初始化,然后再try的小括号的声明一下即可,多个资源需要分号间隔(java9增强)
java9解释: 资源变量必须为final的. 要么必须要么final显式声明类型,要么是隐式final修饰(小括号里声明即成了被隐式final修饰)
注意:
1 为保证正常关闭,这些资源类必须实现AutoCloseable或Closeable接口,事实上java的这些资源类已经实现了)
2 自动关闭try语句块,其实相当于包含了隐式的finally语句块,所以它可以没有catch和finally,亦可以包含
*/
import java.io.*;
public class 异常处理 {
public static void main(String[] args) throws Exception {
//隐式final修饰((java9))
//变量只要被try的小括号里被访问即即相当于被隐式final的修饰了,因此资源无需显示的final修饰
//如下证明,hobby没有使用final修饰
var hobby1 = new StringReader("吃饭了");//StringReader为字符串输入流,read()一次读取一个字符
try ( hobby1){
System.out.println((char)hobby1.read());//吃
}
// System.out.println((char)hobby1.read());
// 上面语句报错,说明hobby资源已经关闭.try自动关闭资源生效了.印证了hobby在try小括号里访问后被隐式final的修饰了
// 如下显式的使用final修饰资源(java9)
final var hobby2 = new StringReader("吃饭了");//StringReader为字符串输入流,read()一次读取一个字符
try ( hobby2){
System.out.println((char)hobby2.read());//吃
}
// System.out.println((char)hobby2.read());
// 上面语句报错,说明hobby资源已经关闭.try自动关闭资源生效了
//在小括号里初始化(java7)
StringReader test = null;//先声明一个变量,因为下面的hobby为try语句块局部变量,外面无法访问,导致无法测试
//StringReader为字符串输入流,read()一次读取一个字符
try ( StringReader hobby3 = new StringReader("吃饭了")){
System.out.println((char)hobby3.read());//吃
test = hobby3;
}
// System.out.println((char)test.read());
// 上面语句报错,说明hobby资源已经关闭.try自动关闭资源生效了
}
}
运行结果:
吃
吃
吃
标签:语句,read,StringReader,try,关闭,final 来源: https://www.cnblogs.com/runwithtime/p/16282671.html