Java7新特性:try-with-resources写法

我们之前对流的操作是这样的,下面是我写的一个生成验证码的接口方法:

java 复制代码
    /**
     * 生成验证码
     * @param request
     * @param response
     */
    @GetMapping("captcha")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response){


        String captchaText = captchaProducer.createText();
        log.info("验证码内容:{}",captchaText);

        //存储redis,配置过期时间 , jedis/lettuce
        redisTemplate.opsForValue().set(getCaptchaKey(request),captchaText,CAPTCHA_CODE_EXPIRED, TimeUnit.MILLISECONDS);


        BufferedImage bufferedImage = captchaProducer.createImage(captchaText);

        try {
            ServletOutputStream outputStream = response.getOutputStream();
            ImageIO.write(bufferedImage,"jpg",outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            log.error("获取流出错:{}",e.getMessage());
        }


    }

但在jdk7我们可以将流的操作写为:

java 复制代码
try (ServletOutputStream outputStream = response.getOutputStream()){

    ImageIO.write(bufferedImage,"jpg",outputStream);
    outputStream.flush();

} catch (IOException e) {
    log.error("获取流出错:{}",e.getMessage());
}
  • 什么是try-with-resources

    • 资源的关闭很多⼈停留在旧的流程上,jdk7新特性就有, 但是很多⼈以为是jdk8的

    • 在try( ...)⾥声明的资源,会在try-catch代码块结束后⾃动关闭掉

    • 注意点

      • 实现了AutoCloseable接⼝的类,在try()⾥声明该类实例的时候,try结束后⾃动调⽤的 close⽅法,这个动作会早于finally⾥调⽤的⽅法

      • 不管是否出现异常,try()⾥的实例都会被调⽤close⽅法

      • try⾥⾯可以声明多个⾃动关闭的对象,越早声明的对象,会越晚被close掉

相关推荐
进击的尘埃13 小时前
拖拽搭建场景下的智能布局算法:栅格吸附、参考线与响应式出码
javascript
小猪努力学前端13 小时前
基于PixiJS的试玩广告开发-续篇
前端·javascript·游戏
bluceli13 小时前
前端构建工具深度解析:从Webpack到Vite的演进之路
前端
wuhen_n13 小时前
v-model 的进阶用法:搞定复杂的父子组件数据通信
前端·javascript·vue.js
wuhen_n13 小时前
TypeScript 深度加持:让你的组合式函数拥有“钢筋铁骨”
前端·javascript·vue.js
滕青山13 小时前
基于 ZXing 的 Vue 在线二维码扫描器实现
前端·javascript·vue.js
Kayshen13 小时前
我在设计工具里实现了一个 Agent Team:多智能体协作生成 UI 的实战经验
前端·aigc·agent
swipe14 小时前
深入理解 JavaScript 中的 this 绑定机制:从原理到实战
前端·javascript·面试
Json_Lee14 小时前
2026 年了,多 Agent 编码该怎么选?agent-team vs Claude Agent Teams vs Claude Squad vs Met
前端·后端·vibecoding
Novlan114 小时前
Stepper 小数输入精度丢失 Bug 修复
前端