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掉

相关推荐
我命由我1234518 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑18 小时前
Sentinel安装
java·后端·微服务
_瑞18 小时前
深入理解 iOS 渲染原理
前端·ios
IT_陈寒18 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
iCOD3R18 小时前
Skill - kill-ai-slop 解决“AI 味”样式
前端·css·ai编程
shuaijie051819 小时前
强制修改调用接口的api地址。
javascript·vue.js·ecmascript
JerrySir19 小时前
恶意 npm 包只活了 17 分钟:技术面试里,为什么“升级依赖”还不算止血?
javascript·安全
皮音19 小时前
Skill 在项目中的实践 —— 从 Agent 困境到 Skill 工程化
前端
白帽小阳19 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
大龄秃头程序员19 小时前
RN 0.86 新架构实战:TurboModule + Fabric 组件 + iOS 原生容器,完整代码开源
前端·react native