静态代码扫描中Java资源对象关闭的探究

2023-11-19

本人在探究静态代码扫描中资源对象关闭规则遇到了一些疑惑,本文将这些疑惑记录下来并逐一找出解答。
包括在哪些情况下,这些资源对象需要手动关闭,怎么正确的关闭,哪些情况下不需要手动关闭,以及为什么。
资源对象包括很多种,本文重点关注输入输出流对象和数据库连接对象。

一、正确的关闭资源对象的写法

  • 第一种写法:
public static void main(String[] args) throws Exception{
    FileOutputStream fileOutputStream = null;
    BufferedOutputStream bufferedOutputStream=null;
    DataOutputStream out=null;
    byte[] data1 = "1这个例子测试文件写".getBytes("GB2312");
    try {
        fileOutputStream = new FileOutputStream("E:\\A.txt");
        bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        out = new DataOutputStream(bufferedOutputStream);
        out.write(data1);
    } catch (Exception e) {
        // TODO: handle exception
    } finally {
        if (out!=null) {
            out.close();
        }
    }
}

在finally 中进行关闭可以保证在程序运行出现异常的情况下,资源对象仍然会被正常关闭。

  • 第二种写法:
public static void main(String[] args) throws Exception{
    byte[] data1 = "这个例子测试文件写".getBytes("GB2312");
    try (
            FileOutputStream fileOutputStream = new FileOutputStream("E:\\A.txt");
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
            DataOutputStream out = new DataOutputStream(bufferedOutputStream)
            )
    {       
        out.write(data1);
    } catch (Exception e) {
        // TODO: handle exception
    }
}

从Java1.7开始,支持了try-with-resources写法,即将资源对象声明的过程放在try()的括号里面,这样java在资源对象使用完成之后会自动关闭。详情请见官方文档

  • 第三种写法:
import org.apache.commons.io.IOUtils;
public static void main(String[] args) throws Except
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态代码扫描中Java资源对象关闭的探究 的相关文章

  • ADC转换后的值推算还原实际测量电量

    ADC转换后的值推算还原实际测量电量 1 确定ADC用几位表示 最大数值是多少 例如一个8位的ADC 最大值是0XFF 就是255 2 确定最大值时对应的参考电压值 一般而言最大值对应5V 具体需参考芯片ADC模块的说明 寄存器有对于输入信
  • 开关电源基本工作原理

    本文以丰富的开关电源案例分析 介绍单端正激式开关电源 自激式开关电源 推挽式开关电源 降压式开关电源 升压式开关电源和反转式开关电源 随着全球对能源问题的重视 电子产品的耗能问题将愈来愈突出 如何降低其待机功耗 提高供电效率成为一个急待解决
  • 技术积累 — Ellisys软件及抓包器用户使用指南

    一 前言 Ellisys号称是业界最先进的蓝牙 Wi Fi USB协议分析仪 支持低功耗蓝牙协议分析测试 支持蓝牙5低功耗以及Wi Fi的物联网应用 支持与原始频谱 UART SPI HCI 逻辑信号等同步的宽带蓝牙5低能耗BLE Wi F
  • 主流安卓APP都中招了!“应用克隆漏洞”的快速检测修复方案

    2018年1月9日 国家信息安全漏洞共享平台发布了关于Android平台WebView控件存在跨域访问高危漏洞的安全公告 漏洞描述 攻击者利用该漏洞 可远程获取用户隐私数据 包括手机应用数据 照片 文档等敏感信息 还可窃取用户登录凭证 在受
  • Android应用的闪退(crash)分析

    文章转自阿里客户端工程师试题简析 Android应用的闪退 crash 分析 1 问题描述 闪退 Crash 是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现 请从crash发生的原因分类与解决方法 在出现crash后如何
  • 从端到端打通模型端侧部署流程(NCNN)

    文章目录 背景介绍 为什么要做端侧推理 端侧深度学习部署流程 一条主要技术路线 ONNX NCNN框架 NCNN的官方介绍 NCNN问题解决 NCNN使用样例 快速在NCNN框架下验证自己的模型 一般流程 YOLOv5的demo测试 全新部
  • 什么是XSS(跨站)攻击

    XSS 跨站 攻击的概念 XSS又叫CSS Cross Site Script 跨站脚本攻击 它指的是恶意攻击者往Web页面里插入恶意html代码 当用户浏览该页之时 嵌入其中Web里面的html代码会被执行 从而达到恶意用户的特殊目的 X
  • 关于C3P0容错和自动重连特性的研究

    最近常有数据库和网络设备升级和搬迁等事情 而各个应用都是基于数据库连接池做的 大部分都是基于C3P0 数据库或网络状况的变动都会导致客户端连接池中的connection失效 如何剔除这些blocked connection就和C3P0的各个
  • 程序静态分析第一课

    程序静态分析第一课 该课程主要内容来自北京大学熊英飞老师的 软件分析技术 事例一 飞机为了保证飞行安全 在很多设备上会设置冗余设备 一般来说都是一主二备三应急 一架飞机上同样功能的设备设施 会安装起码三套或更多来应付其中一套出故障而导致飞机
  • 【火线解码】001.避免在finally语句块中使用return语句

    火线团队推出 火线解码 系列文章 每一篇解释一种不规范的代码写法 用较短的篇幅让大家快速的了解代码规范问题 001 避免在finally语句块中使用return语句 错误的代码示例 public class Bar public Strin
  • php模块化供前端ajax调用的实现

    背景 没有使用php框架 由于临时需求 需要ajax调用php中的方法 简单的写了一个php文件 文件定义了两个方法 如何用ajax分别调用同一个php文件不同的方法 以下是abc php文件 我定义的两个方法a方法和b方法
  • ipconfig bash: ipconfig: command not found...

    在使用linux查看端口的时候 应该用ifconfig Windows才使用ipconfig
  • 静态代码扫描(六)——火线针对资源关闭问题的横向对比报告

    在上一篇文章中 我们列举了一些资源关闭需要考虑的特殊场景 并且预告了会在这篇放出火线和其他开源产品横向的扫描结果对比报告 包括Sonar Infer PMD和Findbugs 由于Lint没有针对资源关闭的规则 未加入对比 一 对比结果 我
  • 静态代码扫描(四)——Java资源关闭研究

    最近一直在研究java资源关闭的检查规则 发现市面上开源的工具针对资源关闭的检测都存在一定不足 同时也无法满足我们业务的需求 所以火线团队针对资源关闭进行了深度的研究 取得了一些不错的进展 但是过程的艰辛也远超了我们的预料 现在就跟大家聊聊
  • jsp 下载文件 AJAX不支持返回流类型 采用jquery easyui的表单提交

    JS filedownLoad function id downForm fileForm form downForm form submit url ctx file downLoad shtml fileid id type POST
  • synchronized 与 Lock 的异同

    最近在做一个监控系统 该系统主要包括对数据实时分析和存储两个部分 由于并发量比较高 所以不可避免的使用到了一些并发的知识 为了实现这些要求 后台使用一个队列作为缓存 对于请求只管往缓存里写数据 同时启动一个线程监听该队列 检测到数据 立即请
  • SHA-256算法实现过程

    整理一下SHA 256的实现步骤 1 定义8个32位常量 h0 0x6a09e667 h1 0xbb67ae85 h2 0x3c6ef372 h3 0xa54ff53a h4 0x510e527f h5 0x9b05688c h6 0x1f
  • PCIe 5.0 规范最新更新及PCIe 5.0测试挑战​

    PCIe 5 0 基础规范 v1 0 在 2019 年年中发布以后 Synopsys 发布了世界上第一款支持 PCIe 5 0 基础规范 v1 0 的 IP 并展示了在其实验室验证发射机 接收机 Tx Rx 性能的环境 Intel 也在 2
  • 技术积累 — Keil 查看内存占用/优化代码

    原文链接 转自Sugar的专栏 转载文章 若有不妥 通知后我会立即删除 一 查看内存占用 1 使用Keil编辑代码时 编译成功后 双击红色框框位置 就会弹出 map文件 2 那么map文件中能够读出哪些信息呢 Program Size Co
  • 静态代码扫描中Java资源对象关闭的探究

    本人在探究静态代码扫描中资源对象关闭规则遇到了一些疑惑 本文将这些疑惑记录下来并逐一找出解答 包括在哪些情况下 这些资源对象需要手动关闭 怎么正确的关闭 哪些情况下不需要手动关闭 以及为什么 资源对象包括很多种 本文重点关注输入输出流对象和

随机推荐

  • Quartz-Spring[一]之MethodInvokingJobDetailFactoryBean配置任务

    Spring中使用Quartz的3种方法 MethodInvokingJobDetailFactoryBean implements Job extends QuartzJobBean 动态启动 暂定 添加 删除定时功能 可传参数 Quar
  • React之state、hooks性能分析

    目录 一 state 1 为什么使用setState 2 setState异步更新 3 如何获取异步的结果 4 setState一定是异步吗 5 源码分析 6 数据的合并 7 多个state的合并 二 为什么需要Hook 三 Class组件
  • stm32之iap实现应用(基于串口,上位机,详细源码)

    开发环境 Window 7 开发工具 Keil uVision4 硬件 stm32f103c8t6 篇幅略长 前面文字很多 主要是希望能让小白们理解 后面就是实现步骤 包括实现的代码 在研发调试的时候我们一般用烧录器下载代码 对于stm32
  • 4.0创建型模式 描述

    创建型模式的主要关注点是 怎样创建对象 它的主要特点是 将对象的创建与使用分离 这样可以降低系统的耦合度 使用者不需要关注对象的创建细节 对象的创建由相关的工厂来完成 就像我们去商场购买商品时 不需要知道商品是怎么生产出来一样 因为它们由专
  • mysql按照某个字段值内容排序

    举个栗子 假如一个商品下 有多个货品 各个货品的状态值都不一样 那么当只想展示商品中的某一个货品时 希望用户端看到的优先级是在售的货品中的一个 根据mysql提供的方法 field column value1 value2 value3 可
  • RTThread学习有关的Keil的两个符号 $Sub$ $main 与 $Super$ $main

    Keil的两个符号 Sub 与 Super 是其做的打 补丁 功能 具体调用方法就是程序中包含有main函数 和 Sub main Super main 两个符号 源码先放出来 re define main function int Sub
  • 三校生计算机教育,三校生有什么专业

    三校生的专业有计算机信息类 旅游类 艺术类 电工技术类 农林类 机械类 建筑工程类 经济管理类 外语类 烹饪 生物化学类 国土资源类 体育类 教育类 交通运输类 自动化类 包装印刷类 医学类 护理学 药学类 铁道运输类 师范类 水利水电类
  • CTreeView

    ClassWizard为CTreeCtrl 树控件 添加的NM DBLCLK 双击 消息的响应函数中带有一个NMHDR 型指针形参 1 OnDblClkTree NMHDR pNMHDR LRESULT pResult 这个陌生的指针类型常
  • IDEA中使用Java连接MySQL数据库的配置和使用方法

    文章目录 IDE和必要配置 数据库连接代码 IDE和必要配置 IDE IntelliJ IDEA 2023 1 必要配置 1 安装好JDK 并且配置环境变量 2 导入MYSQL数据库所需的驱动 如果没有导入 可以参考这篇文章IDEA中的My
  • android Scroller

    参考 http www linuxidc com Linux 2016 01 127276 htm 以前只知道怎么使用scroller 照猫画虎 复制粘贴 今天遇到使用scroller 还是要去搜索 这样不行 要搞懂原理 上面的博客写的很漂
  • 静态链表

    include
  • Linux下防御ddos攻击

    1 Linux下防御ddos攻击 导读 Linux服务器在运营过程中可能会受到黑客攻击 常见的攻击方式有SYN DDOS等 通过更换IP 查找被攻击的站点可能避开攻击 但是中断服务的时间比较长 比较彻底的解决方法是添置硬件防火墙 不过 硬件
  • spring-boot的快速开发

    1 使用Intellij中的Spring Initializr来快速构建Spring Boot Cloud工程 菜单栏中选中Files gt New gt Projects 这个Initializr Service URL 我们一般使用默认
  • 短视频文案如何写,学会以下几种方法,离爆款绝对不远。

    短视频运营 视频肯定是关键 文案是对视频的一种衬托 但是也并不代表文案不重要 在短视频中的段子文案也是精心设计的 所以今天要分享的是视频介绍里的文案 是怎么炼成的 下面就跟大家讲讲如何写出比较好的视频文案 仅仅是形式 具体还是要看自己进行灵
  • 如何在figma中做交互设计

    近一年来 Figma它可以说是体验设计领域最受欢迎的工具 最近 我开始频繁地工作 Axure9 0和Figma切换使用 深刻感受到设计细节带来的体验差异化 今天 通过一些细节和亮点 总结了工具软件体验设计的几个原则 添加图片注释 不超过 1
  • 手把手教你K最近邻分类器分类CIFAR-10

    KNN算法全称为k Nearest Neighbor Classifier 即k最近邻分类器 它可以看作是Nearest Neighbor Classifier最近邻分类器的加强版 无论是最近邻分类器还是k最近邻分类器 其原理都比较简单 其
  • 前端基础之JavaScript

    知识预览 JavaScript概述 JavaScript的基础 JavaScript的对象 BOM对象 DOM对象 实例练习 js扩展 一 JavaScript概述 JavaScript的历史 1992年Nombas开发出C minus m
  • Git 命令/配置笔记

    创建分支命令 git branch 分支名 切换分支命令 git checkout 分支名 合并分支 到当前分支 git merge 列出本地分支 git branch 删除分支 git branch d 分支名 指定标签信息命令 git
  • ESP8266 ERROR:cut here for exception decoder

    在使用ESP8266获取网站的json信息时 串口输出错误信息 cut here for exception decoder 解决办法 获取json的格式不正确 检查json格式的括号 是否缺少
  • 静态代码扫描中Java资源对象关闭的探究

    本人在探究静态代码扫描中资源对象关闭规则遇到了一些疑惑 本文将这些疑惑记录下来并逐一找出解答 包括在哪些情况下 这些资源对象需要手动关闭 怎么正确的关闭 哪些情况下不需要手动关闭 以及为什么 资源对象包括很多种 本文重点关注输入输出流对象和