Java 11 正式发布后,这 8 个逆天新特性教你写出更牛逼的代码

发布于:2021-11-30 17:51:58


概述



美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,将支持到2026年,可以使用下面的地址进行下载:



https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html



版本更新说明

  《Java 11官方参考手册(第11版)》针对Java SE 11做了全面更新,介绍如何开发、编译、调试和运行Java程序。该书由畅销书作者HerbertSchildt撰写,涵盖Java语言的方方面面,包括Java 的语法、关键字、基本编程原则。此外,该书还介绍Java API库的关键元素(如I/O、集合框架、流库和并发实用工具等),分析Swing、Java Bean和servlet,并通过大量真实案例演示Java语言在编程中的实际应用,深入讲解极其重要的模块系统,并在最后介绍Java的交互式编程工具??JShell。重要的是,全书讲解清晰,简明扼要;Herbert的这种写作风格使其著作备受全球数百万读者的青睐。


在Java的版本上,按照官方的说法,Java 的版本发布周期变更为每六个月一次 ?? 每半年发布一个大版本,每个季度发布一个中间特性版本,并且承诺不会跳票。通过这样的方式,开发团队可以把一些关键特性尽早合并到 JDK 之中,以快速得到开发者反馈,在一定程度上避免出现像 Java 9 这样两次被迫延迟发布的窘况。



按照官方的说法,新的发布周期会严格遵循时间点,将于每年的3月份和9月份发布。所以 Java 11 的版本号是 18.9(LTS)。不过与 Java 9 和 Java 10 这两个被称为“功能性的版本”不同(两者均只提供半年的技术支持),Java 11 不仅提供了长期支持服务,还将作为 Java *台的参考实现。Oracle 直到2023年9月都会为 Java 11 提供技术支持,而补丁和安全警告等扩展支持将持续到2026年。


许可证

按照官方的说法,从 Java 11 开始,Oracle 将在 GPLv2 许可证下提供 JDK 版本,采用 Classpath Exception (GPLv2+CPE) 的方式,满足了在商业许可下使用 Oracle JDK 作为 Oracle 产品或服务的一部分,或者不想使用开源软件的需求。这种使用开源许可证和商业许可证的组合取代了历史上的“BCL”许可证,该许可证具有免费和付费商业条款的组合。


新特性

根据官网的公开信息,此处的Java 11主要更新了 17 个 JEP。


181: Nest-Based Access Control(基于嵌套的访问控制)

309: Dynamic Class-File Constants(动态的类文件常量)

315: Improve Aarch64 Intrinsics(改进 Aarch64 Intrinsics)

318: Epsilon: A No-Op Garbage Collector(Epsilon 垃圾回收器,又被称为"No-Op(无操作)"回收器)

320: Remove the Java EE and CORBA Modules(移除 Java EE 和 CORBA 模块,JavaFX 也已被移除)

321: HTTP Client (Standard)

323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 参数的局部变量语法)

324: Key Agreement with Curve25519 and Curve448(采用 Curve25519 和 Curve448 算法实现的密钥协议)

327: Unicode 10

328: Flight Recorder(飞行记录仪)

329: ChaCha20 and Poly1305 Cryptographic Algorithms(实现 ChaCha20 和 Poly1305 加密算法)

330: Launch Single-File Source-Code Programs(启动单个 Java 源代码文件的程序)

331: Low-Overhead Heap Profiling(低开销的堆分配采样方法)

332: Transport Layer Security (TLS) 1.3(对 TLS 1.3 的支持)

333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸缩的低延迟垃圾回收器,处于实验性阶段)

335: Deprecate the Nashorn JavaScript Engine(弃用 Nashorn JavaScript 引擎)

336: Deprecate the Pack200 Tools and API(弃用 Pack200 工具及其 API)


新特性体验

那么,作为一名Java程序猿,Java 11究竟带来了哪些改变呢,对于我们写代码会有什么帮助呢?


1,在Lambda表达式中使用var

本地变量类型var是java 10提出的新概念,它可以从上下文中推断出本地变量的类型,从而提高代码可读性。


publicclassMain{
? ?publicstaticvoid main(String[] args) throwsException{
? ? ? ?URL url = new URL("http://www.oracle.com/");
? ? ? ?URLConnection conn = url.openConnection();
? ? ? ?Reader reader = newBufferedReader(
? ? ? ? ? ? ? ?newInputStreamReader(conn.getInputStream()));
? ?}
}

使用var声明后,上面的代码可以改写成:


publicclassMain{
? ?publicstaticvoid main(String[] args) throwsException{
? ? ? ?var url = new URL("http://www.oracle.com/");
? ? ? ?var conn = url.openConnection();
? ? ? ?var reader = newBufferedReader(
? ? ? ? ? ? ? ?newInputStreamReader(conn.getInputStream()));
? ?}
}

在上面的代码中,我们使用var代替了URL、URLConnection、Reader,提高了代码的可读性,也方便了开发。但是在JAVA 10中,var变量不能在lambda表达式中声明,在JAVA 11中,解决了这个问题。现在,我们可以在lambda表达式中使用var,例如:


(var x, var y) -> x.process(y)
//等价于
(x, y) -> x.process(y)

2,标准化的HTTP Client API

以前我们在程序中使用HttpClient时,通常会引入apache的HttpClient工具包。现在,我们可以使用JDK原生的 HttpClient。


publicclassHttpTest{
? ?publicstaticvoid main(String[] args) throwsException{
? ? ? ?String uri = "http://www.oracle.com/";
? ? ? ?HttpClient client = HttpClient.newHttpClient();
? ? ? ?HttpRequest request = HttpRequest.newBuilder()
? ? ? ? ? ? ? ?.uri(URI.create(uri))
? ? ? ? ? ? ? ?.build();
? ? ? ?HttpResponse response =
? ? ? ? ? ? ? ?client.send(request, HttpResponse.BodyHandlers.ofString());
? ? ? ?System.out.println(response.body());
? ?}
}

上面的例子是同步的get请求,还有其他的方法HttpClient也是提供的,例如:异步get、post提交、并发请求、Get Json和Post Json等。更多资料请查看附件的链接:



JDK 11 发布说明


https://www.oracle.com/technetwork/java/javase/11u-relnotes-5093844.html


JDK 11 官方文档


https://docs.oracle.com/en/java/javase/11/


JDK 11 新特性


https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#NewFeature



作者:xiangzhihong


juejin.im/post/5bb08accf265da0a87266d2a


荐书:《Java 11官方参考手册(第11版)》

编辑推荐:
赫伯特?希尔特(Herbert Schidt)是Java语言专家、畅销书作家。三十多年来,Herbert撰写的程序设计图书在全球的销量达数百万册,并被翻译成多种语言。Herbert已撰写大量关于Java、C++、C和c#编程语言的书籍和文章,包括《Java 11官方入门教程》等。Herbert对计算机的各个方面充满兴趣,其中投入精力多的是计算机语言,尤其是计算机语言的标准化。Herbert是ANSI/ISO委员会的成员,参与了1989年C语言的标准化和1998年C++的标准化工作,以及2011年C++标准的更新。Herbert拥有伊利诺伊大学的学士和硕士学位。他的个人网站为WWW.HerbSchildt.com。
如何购买:点击阅读原文购买,也可坚持留言打卡获得!

如何赠送:留言集赞数大于50赞且排名第一的同学赠送一本,定价198RMB。


觉得本文对你有帮助?请分享给更多人

关注「全栈开发者社区」加星标,提升全栈技能
本公众号会不定期给大家发福利,包括送书、学*资源等,敬请期待吧!
如果感觉推送内容不错,不妨右下角点个在看转发朋友圈或收藏,感谢支持。
好文章,我在看??

相关推荐

最新更新

猜你喜欢