ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习异常处理-自动关闭资源的try语句块

2022-05-17 22:31:23  阅读:138  来源: 互联网

标签:语句 read StringReader try 关闭 final


 

/**
六 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有