来尝尝try-with-resouces语法糖(JDK版本17)

从JDK17新特性看Java性能优化趋势:语法糖如何影响JVM执行效率 本文深入解析JDK17新特性中语法糖对JVM执行效率的影响,探讨模式匹配、密封类等核心语法糖的底层实现与性能优化。通过字节码对比和基准测试,揭示语法糖在提升代码简洁性的同时如何影响性能,并提供高并发场景下的最佳实践和性能监控技巧。 阅读详情

       在JAVA最新的JDK版本17当中,出现了一个新的语法糖,这个语法糖叫做try-with-resouces,它的作用是将原本放在finay块中用来关闭资源的操作转变成自动关闭,这样可以使程序员不用将关闭资源操作层层嵌套在finally块中。但是博主还是推荐使用try-catch块,至于是什么原因嘛,还请待我娓娓道来  ~

一、常用try-catch块

        这里博主使用的是一个通过sql语句查询数据库数据的一个方法来作为参考代码将两种方式的对比,博主会将两种方式都展示给大家,大家来评评理,到底是糖好吃还是常用方法好吃~

//通过ID查询指定的丈夫
    public static HusbandBean getHusbandByID(int id){
        HusbandBean hus = null;
        String sql = "select pk_husid,f_name from t_husband where pk_husid = ?";//sql语句
        try(Connection con = Testuilt.getConnection();//获取数据库的链接
            PreparedStatement ps = con.prepareStatement(sql)){//获取执行sql语句的PreparedStatement对象
            ps.setInt(1,id);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){//处理查询的结果集
                hus = new HusbandBean();
                hus.setHusID(rs.getInt("pk_husid"));
                hus.setName(rs.getString("f_name"));
            }
        }catch(SQLException e){
            e.printStackTrace();//没有关闭资源的操作
        }
        return hus;
    }

二、try-with-resouces语法糖

//通过ID查询指定的丈夫
    public static HusbandBean getHusbandByID(int id){
        HusbandBean hus = null;
        String sql = "select pk_husid,f_name from t_husband where pk_husid = ?";//sql语句
        try(Connection con = Testuilt.getConnection();//获取数据库的链接
            PreparedStatement ps = con.prepareStatement(sql)){//获取执行sql语句的PreparedStatement对象
            ps.setInt(1,id);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){//处理查询的结果集
                hus = new HusbandBean();
                hus.setHusID(rs.getInt("pk_husid"));
                hus.setName(rs.getString("f_name"));
            }
        }catch(SQLException e){
            e.printStackTrace();//没有关闭资源的操作
        }
        return hus;
    }

三、为什么说try-with-resouces是语法糖呢

因为通过反编译过后,其实还是有finally块在进行关闭资源的动作

public static HusbandBean getHusbandByID(int id) {
        HusbandBean hus = null;
        String sql = "select pk_husid,f_name from t_husband where pk_husid = ?";

        try {
            Connection con = Testuilt.getConnection();

            try {
                PreparedStatement ps = con.prepareStatement(sql);

                try {
                    ps.setInt(1, id);
                    ResultSet rs = ps.executeQuery();

                    while(rs.next()) {
                        hus = new HusbandBean();
                        hus.setHusID(rs.getInt("pk_husid"));
                        hus.setName(rs.getString("f_name"));
                    }
                } catch (Throwable var9) {
                    if (ps != null) {
                        try {
                            ps.close();
                        } catch (Throwable var8) {
                            var9.addSuppressed(var8);
                        }
                    }

                    throw var9;
                }

                if (ps != null) {
                    ps.close();
                }
            } catch (Throwable var10) {
                if (con != null) {
                    try {
                        con.close();
                    } catch (Throwable var7) {
                        var10.addSuppressed(var7);
                    }
                }

                throw var10;
            }

            if (con != null) {
                con.close();
            }
        } catch (SQLException var11) {
            var11.printStackTrace();
        }

        return hus;
    }

四、原因来啦

        在日常工作中,我们应该养成随时将我们打开的数据资源打开之后就关闭的习惯,而且大多数公司其实还没有普及JDK17,只是我们程序员擅于在网上冲浪,了解了新的语法糖之后,我们都跃跃欲试,虽然新的语法糖的代码看起来很简洁,但是还是要结合现实情况来选取最适合我们自己的方式。

这一周的画作在此!这是当时去海洋馆玩耍时拍的照片,觉得很有意境就把它画下来啦。把原图放在这里给你们对比对比评价评价~

学习Java语法糖这一篇就够了(详细版) 不知道有多少人针对于java语法是死记硬背的,读完这一篇,让你真正的去理解每一个语法,理解完之后会发现你的技术层次又提高了一个等级。 文章当中泛型、自动装箱拆箱、字符串相加 这三个相对来说写的内容比较多,原因是我写这篇文章的时候,不仅仅想的是 要知道语言背后的转换,而且还想要知道为什么这么做。其次文章当中很多内容都是面试经常会问的。 本篇当中一共记录了十五个Java语法糖,相对来说比较全了,欢迎大家点赞收藏! 目录 一、语法糖是什么? 二、jad反编译工具 三、变长参数 四、枚举 五、泛型 5 阅读详情

相关推荐

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1578

新增的JDK17语法特性

/ Sealed class must have subclasses,此时Dog 被 sealed 修饰,那么Dog 必须要有⼦类!// Animal 为密封类,然后使⽤ permits 关键字,把继承权限开放给了 Dog 类。// 在这段代码中,编译器会⾃动推断出name是⼀个String类型,age是⼀个int类型。当这个类被 final 修饰了,被修饰的类就变成完全封闭的状态了,所有类都没办法继承。密封类除了可以被该关键字修饰,并且在声明末尾使用。如果你的一行代码中有多个方法、多个变量,可以。

Pritar的博客 2806

告别手动打点!用Cesium为你的大疆无人机快速生成区域巡查航线(保姆级教程)

本文详细介绍了如何利用Cesium平台为大疆无人机快速生成区域巡查航线的保姆级教程。通过自动化航线规划,告别传统手动打点的繁琐操作,实现高效、无死角的区域覆盖。文章涵盖环境搭建、实战案例及高级优化技巧,特别适合无人机操作员和巡检工作者提升工作效率。

weixin_30399821的博客 519

jdk1.7中try-with-resources语法糖详解

jdk1.7中try-with-resources语法糖详解:主要是针对所有凡是继承了Closeable这个类,系统在方法退出的时候都会自动的关闭资源。 首先回忆一下jdk1.7之前,我们要通过流读取文件时,代码要怎样写?1.假设本地文件系统d盘下有一个in.txt文件,代码如下:FileInputStream in = null; try { in = ne

小熊Leo的专栏 4921

机械臂算法设计MATLAB|运动学动力学|轨迹规划|路径规划|Simulink

RRT为最常用的路径规划算法,还有其变种(RRT*,RRT-connect等)。RRT是一种多维空间中高效的规划方法。它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树。随机扩展树不断增长,直到到达目的位置。**Step1:**构建多维状态空间(joint space),**Step2:**构建joint space的障碍检测算法**Step3:**在joint space应用RRT。

qq_35997213的博客 4476

四参数与七参数坐标转换含义及区别

一.前言 不同坐标系,其椭球体的长半径,短半径和扁率是不同的。比如我们常用的四种坐标系北京54、西安80、WGS84、CGCS2000所对应的椭球体,它们的椭球体参数就各不相同。而不同空间直角坐标系之间的转换一般通过七参数或者四参数来实现坐标转换。 二.四参数转换 两个不同的二维平面直角坐标系之间转换通常使用四参数模型,四参数适合小范围测区的空间坐标转换,相对于七参数转换的优势在于只需要2个公共已知点就能进行转换,操作简单。 在该模型中有四个未知参数,即: (1)两个坐标平...

尘海折柳的博客 1万+

聊聊Java9-17带来了什么新特性

目录 Java9 模块化 JShell 接口支持私有方法 Java10 Java11 Java12 Java13 Java14 Java15 Java16 Java17 封闭类 switch 模式匹配 模块化

honhong1024的博客 1794

Python爬虫技术应用:体育赛事直播数据抓取与分析

Web爬虫(Web Crawling)是一种通过模拟浏览器行为从网站获取数据的技术。发送请求:发送HTTP请求(通常是GET或POST请求)获取目标网页的HTML内容。解析网页:使用解析工具(如lxml)从HTML中提取出所需要的信息。存储数据:将抓取到的数据存储到数据库、文件或数据结构中,供后续分析和使用。数据分析与展示:使用数据分析工具(如PandasMatplotlib)对数据进行处理、清洗和可视化,生成有价值的报告和图表。Requests:用于发送静态网页的HTTP请求并获取响应。

2201_76125261的博客 1310

【JDK 17 新特性】jdk8~jdk17新特性

局部变量的显示类型声明,常常被认为是不必须的,因而JDK10允许开发人员省略通常不必要的局部变量类型声明,以增强Java语言的体验性、可读性,使用对变量进行。有了该功能,可以减少Java程序中显式强制转换的数量,实现更精确、简洁的类型安全的代码。直接在 switch 上支持 Object 类型,这就等于同时支持多种类型,使用模式匹配得到具体类型,大大简化了语法量,这个功能很实用。JDK13中引入了yield关键字,用于返回值并结束循环,而break只能结束switch循环,不能有返回值。

酷奇的博客 1409

解读 2025《高质量数据集 质量评测规范》

《高质量数据集质量评测规范》为2025年数据质量评估提供标准化框架,适用于政府部门、AI企业、数据服务商等行业主体。规范以"说明文档-数据质量-模型应用"三维体系为核心:明确定义高质量数据集分类,细化各项指标要求(包括文档完整性、数据规范性、应用多样性等),并提供具体评分细则(百分制,90分达标)和计算方法。附录补充多模态数据处理细则,旨在建立可操作的质量评估标准,保障优质数据供给流通。

cdfunlove的博客 1888

Modelsim:LPDDR5仿真(含美光仿真模型官方sv&vcs代码)

虽然,三星在设计跟量产上,早于其他家存储产商,但是镁光后来居上了,是业界首家支持全速 LPDDR5 的供应商,并且开发者在做开发的时候,也是用美光颗粒比较多,所以这里就先以美光的仿真模型为主进行仿真。 本工程为美光官方工程,支持Modelsim、VCS、ncverilog三种仿真器仿真。模型破解过,为完整system-verilog代码。

千歌叹尽执夏的博客 1284

JDK17新特性之--JDK9到JDK17 String 新增的新方法

JDK9之后对String底层存储数据结构进行了重大的修改,同步也增加了需要新的方法,要主有Text Blocks、chars()、codePoints()、describeConstable()、formatted()、indent()、isBlank()、isEmpty()、lines()、repeat()、strip()、stripLeading()、stripIndent()、stripTrailing()、translateEscapes()。 接下来就逐步看看每个方法怎么用。

赵侠客 2897

结构函数分析与 JESD51-14 标准详解

结构函数(Structure Function)是将器件瞬态热响应曲线(冷却曲线)通过数学变换,转换为热阻(Rth)与热容(Cth)沿热流路径一维分布的图形化分析方法。它能“看到”热量从结(Junction)到壳(Case)或环境的过程中,经过每一层结构时的热学特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 57

Java中的语法糖

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。 Java语法糖的种类 java7(含)之前的语法糖主要包括以下语法: 泛型 自动装箱和

feigeswjtu的专栏 1372

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

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

爽呀,JDK17里面可以使用的神仙语法(三)

继续分享JDK17里面的好玩语法,第三弹

static_coder的博客 470

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JDK17新特性概览:从语法糖到性能优化

JDK17作为Java长期支持版本,引入了多项重要特性:密封类通过sealed和permits关键字限制继承关系,增强代码安全性;模式匹配简化了instanceof和switch的类型判断操作。此外还包括增强的随机数生成器、外部函数API等改进。示例展示了密封类在图形系统中的应用,以及模式匹配如何优化类型判断代码。针对IDE兼容性问题,需配置JDK17并调整编译器设置。这些特性全面提升了Java的开发效率和代码质量。

fykam的博客 1128

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

爽呀!JDK17里可使用的神仙语法(三)

关注我的公众号:【编程朝花夕拾】,可获取首发内容。01 引言今天又整理了一些 JDK17里面能用的语法糖,关于继承关系以及方法扩展。02 神仙语法2

成都勇英莉的博客 187

java中的语法糖

1 糖块二、 泛型 2 糖块一、 switch 支持 String 与枚举 3 糖块三、 自动装箱与拆箱 4 糖块四 、 方法变长参数 5 糖块五 、 枚举 6 糖块六 、 内部类 7 糖块七 、条件编译 8 糖块八 、 断言 9 糖块九 、 数值字面量 在java 7中,数值字面量,不管是整数还是浮点数,都允许在数字之间插入任意多个下划线。这些下划线不会对字面量的数值产生影响,目的就是方便阅读。 public class Test { public static void main(String… arg

好谋而寡断的皮皮虾的博客 191

【JDK】Java 中的语法糖

这篇博文咱们就来谈谈 Java 中一个有趣的知识点 ------ 语法糖 1. 语法糖简介 那么,什么是语法糖呢? 语法糖:又称 “糖衣语法”。指:计算机语言中添加的某种语法。这种语法对语言的功能没有影响,只是为了方便程序员开发,提高开发效率,提高程序的可读性(语法糖的存在主要是方便开发人员使用)。 解语法糖:但是,JVM 并不支持语法糖的。语法糖在程序编译后就会被还原成最原始的基础语法结构,这个过程就是 解语法糖(Java 中的语法糖只存在于编译期)。 所以,在 Java 中,真正支持语法糖的是 Ja

sco5282的博客 1051

18个Java语法糖

18个java语法糖

bjzhang75的博客 1437

JDK1.7 更优雅地关闭资源 try-with-resource及其异常抑制

https://www.cnblogs.com/itZhy/p/7636615.html 一、背景 我们知道,在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,数据库连接...

try to do 1542

比较 JDK 8 与 JDK 17 的区别

随着技术的不断发展,Java 也在不断地推出新版本以满足开发者的需求。在本文中,我们将比较两个重要版本:JDK 8 和 JDK 17。JDK 8 是 Java 发展史上的一个里程碑,引入了很多新特性,如 Lambda 表达式和 Stream API。而 JDK 17 是一个长期支持(LTS)版本,也引入了许多新特性和性能改进。让我们深入了解这两个版本之间的主要区别。

m0_68705273的博客 1万+

17 异常的产生过程解析、抛出异常throw、声明异常throws、捕获异常try…catch、异常注意事项、自定义异常、Objects非空判断

目录 异常 异常体系 列:编译期异常、运行期异常、错误练习 Throwable中的常用方法 异常的产生过程解析 异常处理 抛出异常throw 列:throw异常练习 Objects非空判断 声明异常throws 列:throws练习 捕获异常try…catch finally 代码块 异常注意事项 列:1. 多个异常分别处理。 2. 多个异常一次捕获,多次处理。 3. 多个异常一次捕获一次处理。 列:父类抛出异常,子类继承父类实例 自定义异常 列:实现自定义异常 异常.

Birdlun的博客 912

try()圆括号catch(jdk1.7特性)

try(){}catch{}为什么有圆括号一文告诉你,jdk1.7特性

m0_55990500的博客 461

JDK1.7新特性--try-with-resources

简介 try-with-resources语句是一个声明一个或多个资源的try语句。 资源是一个对象,必须在程序完成后关闭它。 try-with-resources语句确保在语句结束时关闭每个资源。 实现java.lang.AutoCloseable的任何对象(包括实现java.io.Closeable的所有对象)都可以用作资源。 以下示例从文件中读取第一行。 它使用BufferedReader实...

我在阴山下 744

【技术升级指南】JDK 17 + Spring Boot 3 全栈革命:深度解析新特性与迁移实战 ——从Lambda到Record,从Spring 5到Native Image的跨越式升级

1 . 语法糖革新(开发者体验升级)2 . 性能飞跃(基准测试数据)3 . 关键API增强。

barcke的博客 1473
上一篇: 巧学JAVA--------扑克牌小游戏
下一篇: 单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)
LINchuana
博客等级 码龄8年 456粉丝 8原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值