千家信息网

java中try-with-resources的使用场景以及实际应用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"java中try-with-resources的使用场景以及实际应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java中try-wi
千家信息网最后更新 2026年11月02日java中try-with-resources的使用场景以及实际应用

本篇内容主要讲解"java中try-with-resources的使用场景以及实际应用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java中try-with-resources的使用场景以及实际应用"吧!

1、开篇,实际try-with-resources使用如下:

/**     * 将二进制文件读取出来     *     * @param filePath 文本绝对路径     * @return     * @throws FileNotFoundException     * @throws IOException     */    public static byte[] getReaderToBinary(String filePath) throws FileNotFoundException, IOException {        int bufferSize = 4096; // 设置缓冲区大小        byte buffer[] = new byte[bufferSize]; // 缓冲区字节数组        File sourceFile = new File(filePath);        byte[] b = null;        try(InputStream fis = new FileInputStream(sourceFile);            BufferedInputStream bis = new BufferedInputStream(fis, bufferSize);            ) {            int len = bis.available();            b = new byte[len];            bis.read(b, 0, len);        }        return b;    }

上述例子参考地址:

     * 作者:这个人太懒了     * 来源:CSDN     * 原文:https://blog.csdn.net/qq_35546153/article/details/83421506     * 版权声明:本文为博主原创文章,转载请附上博文链接!

之前,采用try-catch-finally,则较为繁琐不直观,甚至偶尔会忘记将其关闭,如下:

    InputStream fis = null;        BufferedInputStream bis = null;        try{            fis = new FileInputStream(sourceFile);            bis = new BufferedInputStream(fis, bufferSize);            int len = bis.available();            b = new byte[len];            bis.read(b, 0, len);        }finally {            if(fis != null){                fis.close();            }            if(bis != null){                bis.close();            }        }

2、使用场景

try-with-resources的用法就是,在try关键字的后面跟一个括号,把需要关闭的资源定义在括号内。在try块执行完之后会自动的释放掉资源。

但是必须注意,并不是所有的期望关闭的代码都可以放进其中,只有实现了java.lang.AutoCloseable接口的类,才可以被自动关闭。

eg:上述代码示例中的 InputStream,其定义如下:

public abstract class InputStream implements Closeable

而 Closeable,其定义如下(from jdk1.5版本):

/** * A {@code Closeable} is a source or destination of data that can be closed. * The close method is invoked to release resources that the object is * holding (such as open files). * * @since 1.5 */public interface Closeable extends AutoCloseable

说明:

  • 1、try-with-resource语法是自 JDK7 新增的。

  • 2、其只是一个语法糖:当你将上面代码反编译后会发现,其实对JVM虚拟机而言,它看到的依然是之前的try-catch-finally写法

3、实际使用

场景以 打开了外部资源 居多:

  • 文件

  • 数据库连接

  • 网络连接

  • 等

若有自定义的需求:

public class CustomResource implements java.lang.AutoCloseable {    @Override    public void close() {        System.out.printf("调用了[%s]的close方法\n", this.getClass().getName());    }    public static void main(String[] args) {        try (CustomResource customResource = new CustomResource();){            // do something            System.out.println("do something");            throw new RuntimeException("测试抛出未知异常");        }    }}

控制台输出如下:

do somethingException in thread "main" java.lang.RuntimeException: 测试抛出未知异常        at com.xxx.main(CustomResource.java:22)调用了[com.xxx.CustomResource]的close方法

说明:即使try块中抛出异常,也不影响resource的关闭

4、其他要点

注意:

public class CustomResource implements java.lang.AutoCloseable {    public CustomResource(){        throw new RuntimeException("构造器异常:"+ this.getClass().getName());    }    @Override    public void close() {        System.out.printf("调用了[%s]的close方法\n", this.getClass().getName());        throw new RuntimeException("close方法异常:"+ this.getClass().getName());    }    public static void main(String[] args) {        try (CustomResource customResource = new CustomResource();){            // do something            System.out.println("do something");        } catch (Exception e){            System.out.println("do catch");            e.printStackTrace();        }    }}

控制台输出如下:

do catchjava.lang.RuntimeException: 构造器异常:com.xxx.CustomResource        at com.xxx.CustomResource.(CustomResource.java:13)        at com.xxx.CustomResource.main(CustomResource.java:24)

解释说明(参考地址:https://www.cnblogs.com/itZhy/p/7636615.html):

try-with-resource时,如果对外部资源的处理和对外部资源的关闭均遭遇了异常,"关闭异常"将被抑制,"处理异常"将被抛出,但"关闭异常"并没有丢失,而是存放在"处理异常"的被抑制的异常列表中。

到此,相信大家对"java中try-with-resources的使用场景以及实际应用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

实际 场景 方法 资源 应用 代码 处理 内容 地址 对外部 括号 控制台 文件 缓冲区 语法 构造器 参考 学习 对外 控制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 互联网科技工作委员会副主任毛军 互联网科技公司税收优惠 互联网 科技 中国互联网科技发展 美国互联网黑科技 恒生科技互联网指数分析 农村开互联网科技讲堂 深圳国际航运科技和互联网 互联网校园科技培训 青岛科技大学互联网大赛研究生 四川慕妮娅互联网科技有限公司 国大互联网教育科技有限公司薪资 张召忠谈中国互联网科技 北京互联网科技类企业分布 易租星互联网科技有限公司 北京天晋互联网科技有限公司 互联网时代高科技布局 悟空问答互联网科技 互联网科技自媒体灵感 互联网科技工作委员会毛军 河南真二互联网科技有限公司 互联网金融 科技创新 撒么互联网科技公司 四个字互联网科技公司取名 新华互联网科技2019 坤平互联网科技 互联网科技扶贫时间 广东鹅鹅鹅互联网科技有限公司 互联网科技创新创业项目
0