前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 11新特性

Java 11新特性

作者头像
xiangzhihong
发布2022-11-30 14:52:31
6320
发布2022-11-30 14:52:31
举报
文章被收录于专栏:向治洪

概述

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

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

在这里插入图片描述
在这里插入图片描述

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

许可证

按照官方的说法,从 Java 11 开始,在 GPLv2 许可证下提供 JDK 版本,采用 Classpath Exception (GPLv2+CPE) 的方式,满足了在商业许可下使用 JDK 作为 产品或服务的一部分,或者不想使用开源软件的需求。这种使用开源许可证和商业许可证的组合取代了历史上的“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提出的新概念,它可以从上下文中推断出本地变量的类型,从而提高代码可读性。

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://www.oracle.com/");
        URLConnection conn = url.openConnection();
        Reader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
    }
}

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

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) throws Exception {
        var url = new URL("http://www.oracle.com/");
        var conn = url.openConnection();
        var reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
    }
}

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

代码语言:javascript
复制
(var x, var y) -> x.process(y)
//等价于
(x, y) -> x.process(y)

2,标准化的HTTP Client API

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

代码语言:javascript
复制
public class HttpTest {
    public static void main(String[] args) throws Exception {
        String uri = "http://www.oracle.com/";
 
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uri))
                .build();
 
        HttpResponse<String> response =
                client.send(request, HttpResponse.BodyHandlers.ofString());
 
        System.out.println(response.body());
    }
}

上面的例子是同步的get请求,还有其他的方法HttpClient也是提供的,例如:异步get、post提交、并发请求、Get Json和Post Json等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 许可证
    • 新特性
      • 新特性体验
        • 1,在Lambda表达式中使用var
        • 2,标准化的HTTP Client API
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档