Jdk6 7 9 流关闭的新姿势

不用try-catch-finally关闭资源 代码一定得写的优雅一点! 你还在使用try-catch-finally关闭资源吗,如果是,那么就有点out了。皮皮甜手把手教你使用JDK7引用的try-with-resource。 JDK7之前资源的关闭姿势: /** * jdk7以前关闭流的方式 * * @author hetiantian * */ public class CloseResourceBefore7 { private static final String FileName = "file.txt"; 阅读详情

JDK6

在JDK6及之前,每个资源都需要我们手动写代码关闭,如:

FileInputStream fis = null;
byte[] buffer = new byte[1024];
try {
    fis = new FileInputStream(new File("E:\\Java技术栈.txt"));
    while (fis.read(buffer) > 0) {
        System.out.println(new String(buffer));
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JDK7

JDK7发布后,添加了新特性:try-with-resources语句。所有需要关闭的资源只要实现了java.lang.AutoCloseable(java.io.Closeable就实现了这个接口)接口就在会程序结束后自动关闭。

如上面的读取文件的流程序用JDK7来写:

byte[] buffer = new byte[1024];
try (FileInputStream fis = new FileInputStream(new File("E:\\Java技术栈.txt"))) {
    while (fis.read(buffer) > 0) {
        System.out.println(new String(buffer));
    }
} catch (Exception e) {
    e.printStackTrace();
}

所有的资源在try()里面定义,并去掉了finally模块。

多个资源自动关闭

try()里面可以定义多个资源,它们的关闭顺序是最后在try()定义的资源先关闭。

JDK9

JDK9发布后,又简化了try-with-resources语句的用法。

try()里面可以是一个变量,但必须是final的或者等同final才行。如下面的mis,mos定义成局部变量可以不用final,局部变量可以等同于final,但定义成成员变量就必须是用final修饰的,不然会编译错误

MyInputStream mis = new MyInputStream();
MyOutputStream mos = new MyOutputStream();
try (mis; mos) {
    mis.read("1.9");
    mos.write("1.9");
} catch (Exception e) {
    e.printStackTrace();
}
Connection dbCon = DriverManager.getConnection("url", "user", "password");
try (dbCon; ResultSet rs = dbCon.createStatement().executeQuery("select * from emp")) {
    while (rs.next()) {
        System.out.println("In loadDataFromDB() =====>>>>>>>>>>>> " + rs.getString(1));
    }
} catch (SQLException e) {
    System.out.println("Exception occurs while reading the data from DB ->" + e.getMessage());
}

 

Java关闭流的多种方法(源码级分析) 关闭IO流等等是我们操作文件的基本操作 JVM只会帮我们回收堆栈中的内存, 而对于这种物理连接它无能为力, 得我们手动释放 否则会导致内存泄漏 基本关闭方法 大家平时关闭流可能是这么做的 try{ FileInputStream fis = new FileInputStream("hello.txt");//造一个读文件的流 byte[] buffer = new byte[1024]; int len; while((len = fis.read 阅读详情

相关推荐

CentOS7安装JDK1.8图文教程

1.下载 jdk 的 tar 包         网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.点击 Accept License Agreement 3.选择 jdk-8u171-linux-x64.tar.gz 进行下载 4.进行等待........

weixin_42266606的博客 5万+

JAVA_IO流的关闭两种方式

流的关闭 当使用完流后,显示的关闭所有打开的流仍然是一个好习惯。一个被打开的流有可能会用尽系统的资源,这取决于平台和实现。如果没有将流关闭,另一个程序试图打开另一个流时,可能会得到不需要的资源。 从JDK1.7后,有两种关闭数据流的方法,分别如下: 方法一:手动关闭。即为使用close()显式地关闭流,代码如下 package com.qfstu.Week04.Day01; import java.io.FileInputStream; import java.io.IOException; /**

bolinmengling的博客 6200

使用ONNX Runtime在Java Web应用中部署深度学习模型

当应用场景需要集成深度学习模型进行推理时,直接在Java Web应用中集成深度学习框架可能会面临性能、兼容性等问题。为了将深度学习模型无缝集成到Java Web应用中,是一项广受认可且实用的方法。本篇文档将介绍如何将模型转换为ONNX格式,并通过ONNX Runtime Server进行部署,并通过Java Web应用调用以进行回归或预测任务。本方案的主要目标是实现以下功能:将PyTorch模型转换为ONNX格式。部署ONNX Runtime Server,加载ONNX模型并提供推理服务。

shysea2019的博客 8857

Java8关闭流使用try with resource关闭资源的理解

Java8关闭流使用try with resource关闭资源的理解

迷茫,是因为才华配不上梦想... 3119

Win本地部署DeepSeek

Ollama 提供了简单的接口,用于创建、运行和管理这些模型,同时还维护了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。重启ollama,具体操作为打开搜索ollama进程,将其结束进程,之后再执行相关模型下载命令即可,或重启电脑!Ollama支持多种DeepSeek模型版本,用户可以根据硬件配置选择合适的模型。配置添加系统环境变量OLLAMA_MODELS,设置其值为新的路径,点击确定应用。安装完成后,在终端输入以下命令,检查Ollama版本。:14B、32B或70B版本,适合高端GPU。

m0_67297673的博客 2385

获取B站某用户更多的关注数和粉丝数

获取B站某用户更多的关注数和粉丝数 相关记录 一、 前言 B 站最多只能翻 5 页用户的关注数和粉丝数,如何能够看到更多呢。 方法我也是从网上翻来的,记载博客里,算是我研究过这个话题了。 二、需要的东西 关注数的 api https://api.bilibili.com/x/relation/followings?vmid=2884629&pn=1&ps=20&order=desc&jsonp=jsonp 关注者(粉丝)的 api https://api.bilibili.

Enderman_xiaohei的博客 4817

java关闭流的两种方法

当使用完流后,关闭所有打开的流仍然是一个好习惯。一个被打开的流有可能会用尽系统的资源。

qq_45000816的博客 5107

TPRI-DMP平台介绍

TPRI-DMP为华能集团西安热工院自主产权的工业云PaaS平台,已经过13年的发展和迭代,其具备大规模能源电力行业生产应用软件开发和运行能力

ashou706的专栏 2270

java自动关闭_java中自动关流的新方式

前言在jdk1.7以前,io的操作都是要关流的,而经常有些码农就会忘记关流(比如说我),从而造成资源的浪费,降低系统性能。但值的高兴的是,在jdk1.7以后就不用关流了,流会自动关闭,,这样一来,我们就不用担心关流的问题了。就在刚出版的jdk1.9中又对jdk1.7中的方式又做新的更新,先不急了解新写法,我们先从jdk1.7之前出现,看看之前关流的做法是怎样的。tip:如果想使用这种糖语法关流,就...

weixin_42511769的博客 2479

深度解析长鑫G5 DRAM工艺的技术逻辑与微缩边界

长鑫存储G5 DRAM平台通过多重图形化、45:1高深宽比电容与外围HKMG技术,突破先进光刻受限瓶颈,在11.95 nm有源区半间距下实现阵列微缩与电容结构优化。其核心意义不在于对标国际节点,而在于系统性解决“尺寸缩小—电荷保持—外围跟进而”三大矛盾,展现国产DRAM在无EUV条件下推进先进制程的工艺整合能力。

硬核科技 34

基于Matlab的轨迹分析行为识别

本文将介绍基于Matlab的轨迹分析行为识别方法,并提供相应的源代码。在轨迹特征提取完成后,我们需要通过对于某一时间窗口内的轨迹特征进行聚合和分析,得到相应的行为特征。轨迹分析作为一种简单有效的行为识别方法,在实际应用中得到了广泛的应用。本文介绍了一种基于Matlab的轨迹分析行为识别方法,并提供相应的源代码作为参考。轨迹分析是指对于一定时间内某个对象在空间中运动的路径进行跟踪和分析的方法。在行为识别中,我们可以通过对于轨迹进行特征提取和分析,进而得到该对象的运动模式和行为特征。二、轨迹分析行为识别流程。

DevProPlus的博客 884

JAVA rs 是否要关闭_JDK9新特性实战:流关闭新姿势

做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能。关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化。JDK6在JDK6及之前,每个资源都需要我们手动写代码关闭,如:FileInputStream fis = null;byte[] buffer = new byte[1024];try {fis = new FileIn...

weixin_35744067的博客 149

ADS1115 0-10V高精度ADC模块原理图设计,已量产

在水质监测、智能气象站、环境感知等领域,0-10V 电压输出的传感器占据了重要地位。这类传感器输出信号稳定、抗干扰能力强,但对数据采集模块的精度、线性度和易用性提出了严苛要求。本文将深度解析一款专为 0-10V 传感器设计的高精度 ADC 模块,从硬件架构、性能指标到工程化实践,全面呈现其设计思路与核心价值。

不脱发的程序猿 272

JDK7和JDK9对IO流异常处理方法

package cn.dali3.code19; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /*JDK7处理IO流异常特性 * 格式 try( * 定义流对象A; * 定义流对象B; * ...

chen404897439的博客 463

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JDK9新特性实战:简化流关闭新姿势。

做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能。 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化。 JDK6 在JDK6及之前,每个资源都需要我们手动写代码关闭,如: FileInputStream fis = null; byte[] buffer = new byte[1024]; try {...

Java技术栈,分享最主流的Java技术 696

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

如何关闭流和对象文件

最近在项目中,代码质量整改时做的,full gc扫描,回收不用的资源文件。总结了一下和jdk版本有关 版本是jdk1.6 (如果有多个,最先创建的最后关,最后创建的最先关) 在 JDK 7 之前,你一定要牢记在 finally 中执行 close 以释放资源 https://blog.youkuaiyun.com/guxianyang/article/details/78304142 原则:最好在任何时候使用InputStream或者OutputStream的时候,在finally中调用close()方法,显式关闭。

ademen的博客 871

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JDK9新特性实战:流关闭新姿势

做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能。 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化。 JDK6 在JDK6及之前,每个资源都需要我们手动写代码关闭,如: FileInputStream fis = null; byte[] buffer = new byte[1024]; try { fis ...

weixin_30611509的博客 95

STM32入门指南:从选型到调试的完整实战经验

单片机开发中,内核与外设的关系常被混淆。ARM只提供Cortex-M内核设计,而意法半导体围绕内核构建了STM32的完整外设体系。理解时钟树的分层结构、GPIO的多种模式以及中断优先级机制,是掌握嵌入式系统的基础。工程师在实际项目中面临的芯片选型、开发环境搭建、调试工具使用等环节,都直接影响产品进度与稳定性。本文以STM32为例,从底层原理到工程实践,梳理了从零开始构建嵌入式应用的关键技术路径,并提供了可复现的调试方法与避坑指南。

weixin_34167819的博客 514

IO知识点(四)—— I/O 关闭流的方式

所有的流,无论是输入流还是输出流,使用完毕之后,都应该关闭。 如果不关闭,会产生对资源占用的浪费。 当量比较大的时候,会影响到业务的正常开展。   1,在try中关闭,不推荐使用  在try的作用域里关闭文件输入流,在前面的示例中都是使用这种方式,这样做有一个弊端; 如果文件不存在,或者读取的时候出现问题而抛出异常,那么就不会执行这一行关闭流的代码,存在巨大的资源占用隐患。  pub...

_夜渐凉 935

两步将 CentOS 6.0 原地迁移至 RHEL 7.9 (视频)

本文介绍如何将一个 CentOS 6.0 的系统升级并转换迁移到 RHEL 7.9。

多恩斯基的博客 1642

JDK7和JDK9关于Try-Catch的使用

JDK7的新特性: 可以在try后边加一个(),在括号中引入对象,此对象的作用域是整个try代码中,以文件输入输出流为例,可以在()中引入文件输入流/输出流,在try中代码执行完毕之后,会自动释放资源,不用再调用close释放资源。 格式: try (定义流对象; 定义流对...;) { //可能会产生异常的代码 } catch (异常类变量 变量名) { //异常处理的逻辑 } JDK9中try…c...

wjr1949的博客 578

JAVA正确的关闭IO流方式

try {// ...操作流代码// 依次关闭流try {try {// 此处会报 java.io.IOException: Stream Closed 错误按照先后顺序关闭文件流,这种写法下,有可能会报错误。原因是依赖于,如果直接关闭流,再次关闭,会提示源头已经被关闭,缓存区数据无法输出。正确的操作方式,应该遵循后定义先释放try {// ...操作流代码// 后定义先释放try {try {

今天又是充满希望的一天 2892

JDK7新增功能-利用trycatch语句自动关闭资源

/** *可自动关闭输入流 */ try(Scanner console=new Scanner(System.in)){ int x= console.nextInt(); } /** *也可关闭JDBC用到的资源 */ public class InsertSample2 { public static void main(String[] args) { XSB student

Bazingaea的博客 2907

服务器jdk1.8、MySQL5.7、Tomcat9、redis6.2、Nginx、node、Maven环境搭建

一、前言 服务器阿里云CentOS7.6,Xshell7连接服务器、Xftp传输文件。 搭建jdk1.8,mysql5.7,tomcat9,nginx 一、jdk1.8搭建 1.输入命令:mkdir jdk。root下创建文件夹名字jdk,把jdk.tar.gz放进去。 2.解压jdk:tar -zxvf jdk-8u311-linux-x64.tar.gz,并改名为jdk1.8:mv jdk1.8.0_311 jdk1.8 3.编辑...

weixin_53412247的博客 2300
上一篇: nio 客户端与服务端通信Demo
下一篇: Spring 注解回顾
Coder-Qian
博客等级 码龄11年 63粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值