try-with-resources使用

1、使用场景

        针对 Java 中资源管理和异常管理的正确做法已经有了很好的文档说明。对于任何已成功初始

化的资源,都需要相应地调用它的 close() 方法。这就要求严格遵守 try/catch/finally 块的用法,以

确保任何从资源打开时起的执行路径最终都能调用一个方法来关闭资源。

        编写正确的资源代码需要大量采用嵌套了 try/catch/finally 块的样板代码。 Java Platform,

Standard Edition (Java SE) 7 针对自动资源管理问题给出的解决办法,即 Coin 项目中提出的新语

言结构 try-with-resources 语句。

2、try-catch-finally方式

try{//try块中放可能发生异常的代码。//如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。//如果发生异常,则尝试去匹配catch块。
}catch(BizException bizException){//每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。
}catch(Exception exception){//...
}finally{  //finally块通常是可选的。//无论异常是否发生,异常是否匹配被处理,finally都会执行。//finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
}

注意:

  • 如果同一个try块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个catch块都有存在的意义。

示例代码

public static void main(String[] args) {String filePath = "D://1/file.txt";File file = new File(filePath);BufferedReader br = null;FileReader fr = null;try {fr = new FileReader(file);br = new BufferedReader(fr);String line;while ((line = br.readLine()) != null) {// 处理每一行数据System.out.println(line);}} catch (IOException e) {log.info("main error:", e);} finally {if (fr != null) {try {fr.close();} catch (IOException e) {throw new RuntimeException(e);}}if (br != null) {try {br.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}

3、try-with-resources

        使用 try-with-resources 来代替try-catch-finally。适用范围:

  • 适用范围(资源的定义): 任何实现 java.lang.AutoCloseable或者 java.io.Closeable 的对象。

  • 关闭资源和 final 的执行顺序:try-with-resources 语句中,任何 catch 或 finally 块在声明的资源关闭后运行。

示例代码

public static void main(String[] args) {String filePath = "D://1/file.txt";File file = new File(filePath);try (BufferedReader br = new BufferedReader(new FileReader(file))) {String line;while ((line = br.readLine()) != null) {// 处理每一行数据System.out.println(line);}} catch (IOException e) {log.info("main error:", e);}
}

从上面可以看出比try-catch-finally代码清晰了很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商营销场景的RocketMQ实战01-RocketMQ原理

架构图 Broker主从架构与集群模式 RocketMQ原理深入剖析 Broker主从架构原理 HAConnection与HAClient Broker基于raft协议的主从架构 Consumer运行原理 基础知识 001_RocketMQ架构设计与运行流程分析 RocketMQ这一块,非常关键的一个重要的技术,面试的时候…

高级IO select 多路转接实现思路

文章目录 select 函数fd_set 类型timeval 结构体select 函数的基本使用流程文件描述符就绪条件以select函数为中心实现多路转接的思路select 缺陷 select 函数 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); selec…

PlantUML语法(全)及使用教程-时序图

目录 1. 参与者1.1、参与者说明1.2、背景色1.3、参与者顺序 2. 消息和箭头2.1、 文本对其方式2.2、响应信息显示在箭头下面2.3、箭头设置2.4、修改箭头颜色2.5、对消息排序 3. 页面标题、眉角、页脚4. 分割页面5. 生命线6. 填充区设置7. 注释8. 移除脚注9. 组合信息9.1、alt/el…

docker的知识点,以及使用

Docker 是一个开源的应用容器引擎,可以让开发者将应用程序及其依赖项打包至一个可移植的容器中,从而实现快速部署、可扩展和依赖项隔离等特性。下面是 Docker 的一些知识点以及使用方法: Docker 的组成部分包括 Docker 引擎、Docker 镜像、Do…

MySQL三大日志详细总结(redo log undo log binlog)

MySQL日志 包括事务日志(redolog undolog)慢查询日志,通用查询日志,二进制日志(binlog) 最为重要的就是binlog(归档日志)事务日志redolog(重做日志)undolog…

MySQL备份与恢复(重点)

MySQL备份与恢复(重点) 一、用户管理与权限管理 ☆ 用户管理 1、创建MySQL用户 注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如jack10.1.1.1 基本语法: mysql> create user 用户名被允许连接的主…

ssm+vue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三…

建文工程项目管理软件 SQL 注入漏洞复现

0x01 产品简介 建文工程管理软件是一个适用于工程投资领域的综合型的多方协作平台。 0x02 漏洞概述 建文工程项目管理软件BusinessManger.ashx、Desktop.ashx等接口处存在SQL注入漏洞,攻击者可通过该漏洞获取数据库中的信息(例如,管理员后台…

无图谱不AI之三元组数据保存Neo4j

目录 1. 代码学习1.1 源代码1.2 代码解读 没有图谱称为弱人工智能,有图谱的称为强人工智能。 图谱可以让机器学习和人工智能具备推理能力。 1. 代码学习 1.1 源代码 # -*- coding: utf-8 -*- from py2neo import Node, Graph, Relationship# 可以先阅读下文档&a…

微信小程序体验版提交审核,提示接口未配置在app.json文件且无权限

在火狐浏览器 打开微信公众平台 发布小程序 弹窗一闪而过 是因为 放开这里就可以了

RPA机器人如何确保敏感数据的安全性

数据资源作为数字化时代的关键要素,其重要性一直受到高度重视,由此,数据安全也成为企业和个人必须面对的重要问题。随着RPA技术在各个行业的广泛应用,其系统安全性也成了每个企业关注的重中之重。经验丰富的RPA专家可以有效地采取…

已解决!nginx+php上传大文件返回502错误

先说结论:需要修改fpm配置文件: request_terminate_timeout 300 request_terminate_timeout和max_execution_time 有何不同? request_terminate_timeout和max_execution_time是两个不同的PHP配置参数,它们分别控制着不同的执行…

.360、halo勒索病毒来敲门:抗击.360、halo病毒的智慧安全策略

尊敬的读者: 在数字时代,网络威胁层出不穷,而.360、halo勒索病毒正是近期崛起的一位狡诈对手。本文将深度解析.360、halo病毒的毒性攻击方式,为你揭示如何在遭受其加密威胁后迅速自救,同时提供切实可行的预防策略。面对…

python 入门基础(一)

1. python 的程序结构:包、模块、函数。 包里面包含多个模块,模块里面包含多个函数。 3. python的数据结构: 元组 列表 字典(仅列出不同于c的地方) 4. 模块:一个文件就是一个模块。 模块里面可以包…

网络通信安全的坚固防线双向认证技术详解

目录 什么是双向认证 双向认证的工作原理 双向认证的实现方式 双向认证的重要性 双向认证的挑战 安全最佳实践 小结 什么是双向认证 双向认证,又称为双向身份验证或双向鉴别,是一种在通信双方之间建立信任关系的安全机制。在通信过程中&#xff0…

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-BiLSTM-Multihead-…

特征变换1

编译工具:PyCharm 有些编译工具不用写print可以直接将数据打印出来,pycharm需要写print才会打印出来。 概念 1.特征类型 特征的类型:“离散型”和“连续型” 机器学习算法对特征的类型是有要求的,不是任意类型的特征都可以随意…

docker (简介、dcoker详细安装步骤、容器常用命令)一站打包- day01

一、 为什么出现 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应…

阿里云Arthas使用——通过watch命令查看类的返回值 捞数据出来

前言 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类…

交互思路之“大象冰箱”

前言 是时候往往会思考一些工作的方法论,每个设计师都都自己搭建方法论的思路,笔者更擅长巨像化的设计思路,今天就介绍一个设计思路:如何把大象装进冰箱里? 来源 这个思路来源于宋丹丹与赵本山合作的小品“送水工”…