栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDK1.8源码学习--lang包(AutoCloseable)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDK1.8源码学习--lang包(AutoCloseable)

前言


月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!
 

一.AutoCloseable的作用

       1. 直接撸源码英文注释:
 
        2.从源码注释.我们可以知道: 

     1.这个接口是作用于一些掌握某些资源的对象(比如一些文件或者建立连接),而这个接口可以在这些对象 退出之前迅速的释放这些资源,避免出现一些异常和错误

        2.即使一个基类下的部分子类和实例并不持有某些可释放的资源,实现该接口也并不意外,意思就是多实现AutoCloseable也没有什么问题

         3.对于一些需要去释放资源的对象,推荐使用try-catch-resource的形式来释放资源,但是也有一些特殊情形,比如Stream中的Nio 并不是必须的

    通俗的讲,就是这个接口实现了一种新的释放资源的结构方式,之前没有这个接口的时候,我们都需要在finally{}块中去手动释放资源,但是现在只需要在try()中去定义即可,等到try代码块的结束(无论是正常结束,还是异常结束,只要离开该代码块)完成后资源会自动释放掉.

         3.举例说明
package text.lang;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


public class AutoCloseableText {

    public static class CustomeObject implements AutoCloseable{
        @Override
        public void close() throws Exception {
            System.out.println("自动关闭了....");
        }
    }



    
    public static void releaseBefore(){
        InputStream inputStream = null ;
        try {
            inputStream = new FileInputStream("123");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (inputStream != null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }

    
    public static void releaseNow(){

        try( CustomeObject customeObject = new CustomeObject()) {
            //当离开当前代码块,资源会被自动释放
            System.out.println("正常结束....");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    public static void releaseNowErro(){

        try( CustomeObject customeObject = new CustomeObject()) {
            //当离开当前代码块,资源会被自动释放
            int i = 10/0;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("异常了...");
        }

    }

    public static void main(String[] args) {
        //正常演示
        releaseNow();
        System.out.println("============================");
        //异常演示
        releaseNowErro();
    }
}

                演示结果:

        

 可以看到,无论是正常执行,还是异常结束都会自动关闭相关资源(前提是当前对象实现了AutoCloseable接口).

二.AutoCloseable方法
    void close() throws Exception;
三.总结

        AutoCloseable接口,让释放资源变得更加智能化.

        说明时候csdn也能让月央泽,更加智能化...

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号