当前位置: 首页 > 后端技术 > Java

杰出的!Java18正式发布,默认为UTF-8,不推荐使用finalize,.别闹了!

时间:2023-04-01 19:23:44 Java

上一期:沉重!JDK17发布,Oracle宣布将正式从JDK17中免费。。JDK18正式发布JDK17刚刚发布半年,JDK18如期而至。JDK版本号是成人的吗?JDK18已经发布了,stackmanager继续为大家讲解!JDK18延续了JDK17首创的免费策略,但JDK18-20不是长期支持版本,所以要注意不要在生产中使用。最新的OracleJava支持路线图:JDK18新功能列表ID功能描述1400:UTF-8默认默认UTF-82408:简单Web服务器简单Web服务器3413:JavaAPI文档中的代码片段简化文档代码片段4416:重新实现核心反射withMethodHandles重新实现反射核心机制5417:VectorAPI(ThirdIncubator)vectorAPI(inthreeincubator)6418:Internet-AddressResolutionSPIInternetaddressresolutionSPI7419:ForeignFunction&MemoryAPI(SecondIncubator)externalfunctionandmemoryAPI(Inthesecondincubation)8420:PatternMatchingforswitch(SecondPreview)switchpatternmatching(inthesecondpreview)9421:DeprecateFinalizationforRemovaldeprecatedFinalizationJDK18这个版本提供了9个增强功能,栈长会给你一个列表一个解释。关注公众号Java技术栈,持续分享最新最主流的Java技术~JDK18个新特性详解1、400:UTF-8byDefaultDefaultUTF-8是的,UTF-8被指定为标准的JavaAPI默认字符集。在JDK17及更早版本中,默认字符集是Java虚拟机运行时确定的,取决于不同的操作系统、区域设置等因素,存在潜在风险。从此版本开始,依赖于默认字符集的API在所有实现、操作系统、区域设置和配置中保持一致。可以使用如下命令查看当前JDK的默认字符集:java-XshowSettings:properties-version2>&1|grepfile.encodingfile.encoding=UTF-8file.encoding.pkg=sun.io在JDK中通过如下API获取当前JDK的默认字符集:Charset.defaultCharset()大家都知道一致的重要性字符集,保持默认字符集在任何地方都一致非常有用。2.408:SimpleWebServersimplewebserver提供了一个miniwebserver,通过命令行工具启动:$jwebserverBinding默认为loopback。对于所有接口使用“-b0.0.0.0”或“-b::”。在127.0.0.1端口8000URL上提供/cwd和子目录:http://127.0.0.1:8000/仅限于静态文件,类似于Apache和Nginx的静态服务器功能,但更简单,功能少,设置简单。我认为对于简单的临时测试来说还可以。您无需下载和配置其他服务器组件。以后可以用Java来做。如果你有兴趣,可以试试看!3.413:JavaAPI文档中的代码片段JavaAPI文档中支持片段代码片段。添加@snippet标签是为了简化将示例源代码包含在API文档中的情况。使用语法:{@snippet...}以前是这样写的:/***

{@code*String[]y=x.toArray(newString[0]);*
**/这在JDK18中是可能的:/***下面的代码展示了如何使用{@codeOptional.isPresent}:*{@snippet:*if(v.isPresent()){*System.out.println("v:"+v.get());*}*}*/4,416:ReimplementCoreReflectionwithMethodHandles重新实现反射核心机制(MethodHandles)JDK18使用MethodHandles作为反射的底层机制,重新实现了java.lang.reflect.Method、Constructor和字段组件将大大降低反射API的维护和开发成本。另外整理了最新最全的Java反射面试题,微信搜索Java面试库小程序在线刷题。5.417:VectorAPI(ThirdIncubator)VectorAPI(inthreeincubator)VectorAPI这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示可靠编译以支持运行时的向量计算CPU架构上最好的矢量硬件指令,矢量运算可以提供比等效标量计算更好的性能,在机器学习、人工智能和密码学等领域非常普遍。这个增强的API允许以一种方式表达向量计算,在运行时,在支持的CPU架构上可靠地编译成最佳向量指令。下个版本会修正吗?6.418:Internet-AddressResolutionSPIInternet地址解析SPI定义了一个全新的SPI(service-providerinterface)用于主要名称和地址的解析,使得java.net.InetAddress可以在平台设备外使用第三方解析.7.JEP419:ForeignFunction&MemoryAPI(SecondIncubator)ExternalfunctionandmemoryAPI(insecondaryincubator)改进了JDK14和JDK15引入的API,通过有效调用外部函数(即JVM之外的代码),除了安全地访问外部内存(JVM之外的内存)之外,这些API还可以调用本机库并处理本地数据,与Java运行时环境之外的代码和数据进行交互。8.JEP420:PatternMatchingforswitch(SecondPreview)instanceof模式匹配的概念大家都很清楚了吧?如果不确定,可以阅读这篇文章:Java14中的模式匹配,一个很棒的新特性!这次JDK17支持switch语句的模式匹配,什么鬼?看看下面的例子!旧代码写法:staticStringformatter(Objecto){Stringformatted="unknown";if(oinstanceofIntegeri){formatted=String.format("int%d",i);}elseif(oinstanceofLongl){formatted=String.format("long%d",l);}elseif(oinstanceofDoubled){formatted=String.format("double%f",d);}elseif(oinstanceofStrings){formatted=String.format("String%s",s);}returnformatted;}新的模式匹配方法:staticStringformatterPatternSwitch(Objecto){returnswitch(o){caseIntegeri->String.format("int%d",i);caseLongl->字符串。格式(“长%d”,l);caseDoubled->字符串。格式(“双%f”,d);caseStrings->String.format("String%s",s);默认->o.toString();};}太棒了,在switch上直接支持Object类型,相当于同时支持多种类型,使用模式匹配获取具体类型,大大简化了语法量。这个功能还是蛮实用的。我期待成为常客。堆栈管理器将在另一篇文章中详细介绍。关注公众号:Java技术栈,公众号会第一时间推送Java新特性教程可以去Java技术栈博客:https://www.javastack.cn/cate...9,JEP421:DeprecateFinalizationforRemovalAbandoningFinalization如果你现在使用finalize方法:它已经被标记为过时了。.finalize大家应该都很清楚了吧!可以帮助我们主动释放系统底层资源。老实说,我从来没有用过它。Java自动管理内存。使用它会导致潜在的系统安全风险。没有帮助反而是负担,所以计划被取消了。Finalization现在默认是开启的,但是可以通过下面的参数来关闭:--finalization=disable后续版本会默认关闭,然后逐渐完全删除,我估计在下一个长期会完全删除支持JDK21版本,不要再用finalize了,以后面试回答finalize、final、finally的区别。可以考虑使用其他的资源管理技术,比如:try-with-resources(JDK7+)和cleaners(JDK9+),关于这个栈我会另外写一篇文章详细介绍,关注公众号:Java技术堆栈,公众号尽快推。小结本文主要介绍JDK/Java18的9个新特性的基础知识,虽然现在用不到,但了解和学习还是很有必要的。技术更新太快,不进则退。另外根据最近的调查,目前市场上的主流版本还是JDK8,其实就是JDK11,但是现在随着JDK17+的免费发布,JDK8会逐渐被取代,JDK17+会成为下一个主流版本。最后,栈长有空会继续更新一些JDK新特性的详细教程,关注公众号Java技术栈第一时间推送。如果想看历史悠久的Java8+系列新特性教程,也可以在公众号菜单阅读。以前的Java教程和示例源码:https://github.com/javastacks...OracleJDK18下载地址:https://www.oracle.com/java/t...OpenJDK18下载地址:https:///jdk.java.net/18/有兴趣的可以下载试试!!老铁们,点击观看,转发支持,欢迎分享给更多的朋友~关注Java技术栈,持续分享最新最主流的Java技术~版权声明:本文为公众号》Java《技术栈》原创,转载引用本文内容请注明出处,抄袭洗稿均属侵权投诉,后果自负,并保留追究法律责任的权利.推荐近期热点文章:1.1000+Java面试题及答案(2022最新版)2.精彩!Java协程来了。。。3.SpringBoot2.x教程,太全面了!4.别补了有爆有爆的画面,试试装饰模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!