Java——IO流(一)-(8/8):释放资源-try-catch-finally、try-catch-resource

目录

try-catch-finally

介绍

实例演示1

实例演示2

try-catch-resource

介绍

实例演示


try-catch-finally

介绍

普通的释放流的方法可能会因中间的异常或是其他原因,导致程序执行不到释放流的代码就结束了,会有资源浪费的风险,所以建议使用另外的资源释放方式来避免这种资源浪费。

try{

        ...

        ...

}catch (IOException e){

        e.printStack();

}finally{

        ...

}

  • finally代码区的特点:无论try中的程序是正常执行了,还是出现了异常,最后都一定会执行finally区,除非JVM终止
  • 作用:一般用于在程序执行完成后进行资源的释放操作(专业级做法)。

实例演示1

public class Test1 {public static void main(String[] args) {try {System.out.println((10 / 2));
//        return;                   //跳出方法的执行————依旧会执行finally区的代码
//        System.exit(0);     //终止虚拟机————不会执行finally区的代码} catch (Exception e) {e.printStackTrace();} finally {System.out.println("===finally执行了一次===");}}public static int chu(int a,int b){try {return a/b;} catch (ArithmeticException e) {e.printStackTrace();return -1;  //代表程序出现异常} finally {//千万不要在finally中返回数据!
//            return 111;}}
}

运行结果:

实例演示2

对上篇的文件复制案例进行修改:

此处会报错的原因:

IDEA担心在finally执行之前,我们就已经把流给释放了,就会产生空指针异常;

或者是在流创建出来前(未赋值)就产生了异常,于是执行finally区的代码同样会空指针异常,

所以使用这个方法我们需要再嵌套一层try-catch

import java.io.*;public class copyFile {public static void main(String[] args){InputStream is = null;OutputStream os = null;try {//需求:复制照片//1.创建一个字节输入流管道与源文件接通is = new FileInputStream("C:/Users/Administrator/Pictures/flower.jpg");//2.创建一个字节输出流管道与目标文件接通os = new FileOutputStream("C:/Users/Administrator/Desktop/test.jpg");//多加一条语句System.out.println(10 / 0);//3.创建一个字节数组,负责转移字节数据byte[] buffer = new byte[1024];     //1KB//4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少int len;    //记住每次读取了多少个字节while( (len = is.read(buffer)) != -1 ){os.write(buffer,0,len);}System.out.println("复制完成!");} catch (IOException e) {e.printStackTrace();} finally {//释放资源的操作try {os.close();  //从内到外关闭流} catch (IOException e) {e.printStackTrace();}try {is.close();} catch (IOException e) {e.printStackTrace();}}}
}

try-catch-resource

介绍

JDK7开始提供了更简单的资源释放方案:try-with-resource

try(定义资源1;定义资源2;...){        该资源使用完毕后,会自动调用其close()方法,完成对资

        可能出现异常的代码;             源的释放

}catch(异常类名 变量名){

        异常的处理代码;

}

  •  ()中只能放置资源,否则报错
  • 资源一般指的是最终实现了AutoCloseable接口。资源都会有一个close方法

public abstract class InputStream implements Closeable{ }

public abstract class OutputStream implements Closeable,Flushable{ }

public interface Closeable extends AutoCloseable{ }

实例演示

同样改造一下文件复制的案例:

import java.io.*;public class copyFile {public static void main(String[] args) throws Exception{try (//1.创建一个字节输入流管道与源文件接通InputStream is = new FileInputStream("C:\\Users\\Administrator\\Pictures\\flower.jpg");//2.创建一个字节输出流管道与目标文件接通OutputStream os = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.jpg");//注意:这里只能放置资源对象 (流对象)){//需求:复制照片//3.创建一个字节数组,负责转移字节数据byte[] buffer = new byte[1024];     //1KB//4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少int len;    //记住每次读取了多少个字节while( (len = is.read(buffer)) != -1 ){os.write(buffer,0,len);}os.close();  //从内到外关闭流is.close();System.out.println("复制完成!");} catch (IOException e) {e.printStackTrace();}}
}

END


学习自:黑马程序员——Java课程

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

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

相关文章

Web渗透:文件包含漏洞(part.1)

"文件包含漏洞"(File Inclusion Vulnerability)是一种常见的Web应用程序漏洞,攻击者可以通过这个漏洞在目标系统上包含或执行任意文件。主要有两种类型的文件包含漏洞: 本地文件包含(Local File Inclusion, …

Python学习打卡:day17

day17 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day17121、Python 操作 MySQL 基础使用pymysql创建到 MySQL 的数据库链接执行 SQL 语句执行非查询性质的SQL语句执行查询性质的SQL语句 122、Pyth…

全局mixins

一、文章由来 在开发过程中发现在钩子函数位置直接使用dicts就能直接绑定数据了,由此溯源发现了自己的盲区 二、局部使用 // myMixin.js文件 var myMixin {created: function () {this.hello()},methods: {hello: function () {console.log(hello from mixin!)…

隐秘而又复杂的恶意软件:SSLoad

SSLoad 是一种隐秘的恶意软件,主要通过钓鱼邮件打开突破口,收集各种信息再回传给攻击者。近期,研究人员发现 SSLoad 通过诱饵 Word 文档投递恶意 DLL 文件,最终部署 Cobalt Strike。另一种攻击方式是利用钓鱼邮件诱导受害者到 Azu…

JVM专题十三:总结与整理(持续更新)

图解JVM JVM与Java体系结构 JVM垃圾回收算法 JVM垃圾回收器 图解JVM主要是放了前面12个章节的我们给大家画的图,做了整体的汇总,大家可以根据图区回忆我们所说的内容,查缺补漏。 实战经验 1、项目中数据量多少,QPS与TPS最高多少…

展开说说:Android列表之RecyclerView

RecyclerView 它是从Android5.0出现的全新列表组件,更加强大和灵活。用于显示列表形式 (list) 或者网格形式 (grid) 的数据,替代ListView和GridView成为Android主流的列表组件。可以说Android客户端只要有表格的地方就有RecyclerView。 RecyclerView 内…

技术速递|Visual Studio Code 的 .NET MAUI 扩展现已正式发布

作者:Maddy Montaquila 排版:Alan Wang 今天,我们非常高兴地宣布 .NET MAUI VS Code 扩展插件结束了预览阶段,并将包含一些期待已久的新功能 - 包括 XAML IntelliSense 和 Hot Reload! 什么是 .NET MAUI 扩展插件&…

鸿蒙开发Ability Kit(程序框架服务):【ServiceAbility切换】 组件切换

ServiceAbility切换 FA模型中的ServiceAbility对应Stage模型中的ServiceExtensionAbility。Stage模型下的ServiceExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的ServiceAbility的切换,对于系统应用和三方应用策略有所不同…

4A的「A」会变成AI的「A」吗?

戛纳国际创意节上,广告集团WPP的全球CEO Mark Read 和英国CEO Karen Blackett 解释了WPP如何应对AIGC所带来的「威胁」。同时,Mark Read 与Elon Musk对话,讨论「技术创新的变革力量,人工智能如何重塑创造力、商业和社会&#xff0…

Duix - 硅基数字人SDK

简介 Introduction DUIX(Dialogue User Interface System)是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源,开发者可自行接入多方大模型、语音识别(ASR)、语音合成(TTS)能力,实现数字人实时交互,并在Android和iOS多终端一键部署,让每个开发者可轻松…

基于长短时记忆网络LSTM的TE过程故障诊断(MATLAB R2021B)

实验所用 TE 仿真过程的数据集是网上公开的数据集,该数据集中的训练集和测试集分别包含 20 种故障工况和一种正常工况数据,其中所采集的每个样本信号包含 41 个测量变量和 11 个控制变量,所以每个时刻采集到的样本有 52 个观测变量。 TE 仿真…

IO流

文件 什么是文件 文件流 常用的文件操作 创建文件对象相关构造器和方法 public class FileCreate {public static void main(String[] args) {}//方式 1 new File(String pathname)//根据路径构建一个File对象Testpublic void create01() {String filePath "e:\\news1.…

TMGM:ASIC撤销禁令,TMGM强化合规、重启差价合约服务

TMGM作为差价合约(CFDs)与保证金外汇交易领域的领航者,安全、合规、高效被奉为我集团的终身使命。澳大利亚证券和投资委员会(ASIC)已正式撤销了早前针对TMGM差价合约业务实施的临时止损令。这一误会的解除,…

使用North自部署图床服务

图床 图床可以把图片转为链接,从而方便我们书写、分享博客,目前图床主要分为以下几类: 利用 Git 仓库存储对象存储(OSS、COS、七牛云等)免费公共图床(SM.MS、聚合图床、ImgTP、Postimage等) 但上述图床都…

Zabbix 监控系统部署

Zabbix 监控系统部署 Zabbix是一个企业级开源分布式监控解决方案,可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的运行状况和完整性。 Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(转换、拆分、分割、连接、替换、查找、“Like“)

字符串分割,文末示例(文末代码3附有源码) 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

活动|华院计算受邀参加2024全球人工智能技术大会(GAITC),探讨法律大模型如何赋能社会治理

6月22至23日,备受瞩目的2024全球人工智能技术大会(GAITC)在杭州市余杭区未来科技城隆重举行。本届大会以“交叉、融合、相生、共赢”为主题,集“会、展、赛”为一体,聚“产、学、研”于一堂。值得一提的是,…

C#——命名空间详情

命名空间 在 C# 中,可以将命名空间看作是一个范围,用来标注命名空间中成员的归属,一个命名空间中类与另一个命名空间中同名的类互不冲突,但在同一个命名空间中类的名称必须是唯一的。 定义命名空间 定义命名空间需要使用 namesp…

【设计模式】行为型-策略模式

策略模式,如春风吹过,随心所欲,变幻无穷,每一丝风都是一种选择。 文章目录 一、订单处理二、策略模式三、策略模式的核心组成四、运用策略模式五、策略模式的应用场景六、小结推荐阅读 一、订单处理 场景假设:有一个…

容器技术-docker5 (1)

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。 注意如果使用 build 指令,在 Dockerfile 中设置…