JDK11优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析

在这里插入图片描述

一、前言

上一期讲了JDK10的一些新特性,需要回顾的朋友们可以去该专栏回顾一下

这一期讲一讲JDK11的一些新功能

二、新增特性

以下是JDK 11的一些新增或变化的特性:

1. 纯字符串类型的 HTTP 客户端:

JDK 11 引入了一个新的 HTTP 协议的客户端 API,它提供了一种简单的方式来发送 HTTP 请求并处理响应。下面是一个简单的例子:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;public class HttpClientExample {public static void main(String[] args) {HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/users")).build();client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println).join();}
}

2. 局部变量类型推断的增强:

JDK 11 支持在 lambda 表达式中使用 var 关键字,并且在更多的场景中可以进行类型推断。例如:

import java.util.List;public class VarExample {public static void main(String[] args) {List<String> names = List.of("Alice", "Bob", "Charlie");names.forEach((var name) -> {System.out.println(name);});}
}

3. 废弃的 G1 垃圾收集器:

JDK 11 废弃了 G1 垃圾收集器中的一些标志选项,这些选项已经不再推荐使用。

4. String 类的新方法:

JDK 11 在 String 类中新增了一些方法,例如 isBlank()lines()strip()stripLeading()stripTrailing() 等,用于方便地处理字符串。

当然,还有其他一些变化和新增的特性,继续如下:

5. JDK 11 允许在 lambda 表达式的参数中使用 var

Local-Variable Syntax for Lambda Parameters:JDK 11 允许在 lambda 表达式的参数中使用 var,以简化代码。例如:

import java.util.function.Predicate;public class LambdaExample {public static void main(String[] args) {Predicate<String> startsWithA = (var s) -> s.startsWith("A");System.out.println(startsWithA.test("Apple")); // trueSystem.out.println(startsWithA.test("Banana")); // false}
}

6. 嵌套访问控制

Nest-Based Access Control:JDK 11 引入了一种新的访问控制方式,即嵌套访问控制,在嵌套类中,可以访问外部类的私有成员。例如:

public class Outer {private static String message = "Hello";public static class Inner {public void printMessage() {System.out.println(message);}}public static void main(String[] args) {Inner inner = new Inner();inner.printMessage();}
}

7. 新的垃圾收集器 Epsilon

Epsilon: A No-Op Garbage Collector:JDK 11 引入了一个新的垃圾收集器,称为 Epsilon,它实际上是一个无操作(no-op)的垃圾收集器,用于性能调优和测试目的。

8. Unicode 10:

Unicode 10:JDK 11 更新了 Unicode 版本,支持更多的字符和符号。

9. HTTP Client (Standard):

HTTP Client (Standard):JDK 11 引入了一个新的标准 HTTP 客户端,取代了过时的 HttpURLConnection。新的 HTTP 客户端 API 提供了更简洁、更灵活的方式来进行 HTTP 请求和处理响应。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;public class HttpClientExample {public static void main(String[] args) throws Exception {HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.example.com/data")).build();HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());}
}

10. 允许直接运行单个源文件,无需先进行编译

Launch Single-File Source Code:JDK 11 允许直接运行单个源文件,无需先进行编译,这对于简单的脚本和小型应用程序非常方便。

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}
}

可以直接运行:java HelloWorld.java

11. 引入了 ZGC垃圾收集器

ZGC: A Scalable Low-Latency Garbage Collector:JDK 11 引入了 ZGC(Z Garbage Collector),它是一种低延迟的垃圾收集器,适用于大内存应用程序和需要快速响应的场景。

12.JDK 11 废弃了安全管理器(Security Manager)和 Java EE 模块

Deprecate the Security Manager and the Java EE Modules:JDK 11 废弃了安全管理器(Security Manager)和 Java EE 模块,鼓励开发者使用更现代的安全框架和技术。

以上是 JDK 11 中的一些重要特性和改进,这个版本还包含了许多其他小的改进和修复。

三、移除和废弃项

在 JDK 11 中,有一些功能被移除或废弃。以下是一些详细说明和示例代码:

  1. 移除的功能
  • Java EE 模块:JDK 11 移除了一些 Java EE 相关的模块,如 java.xml.wsjava.xml.bindjava.xml.ws.annotationjava.corba 等。这些模块在 JDK 9 中已经被废弃。如果你需要使用这些功能,你可以考虑使用 Jakarta EE 或其他的替代方案。

示例代码:在 JDK 11 中,如果你的代码中使用了下面的导入语句,那么将会编译错误:

import javax.xml.ws.WebServiceClient;
import javax.xml.bind.annotation.XmlRootElement;
  1. 废弃的功能
  • Security Manager:在 JDK 11 中,Security Manager 被废弃了。Security Manager 是一种安全机制,用于控制 Java 应用程序的访问权限。在 JDK 11 中,鼓励开发者使用更现代的安全框架和技术,如 Security Manager 和 Security Policy 文件的组合。

示例代码:在 JDK 11 中,如果你的代码中使用了 Security Manager 相关的 API,如下面的代码,编译时会出现警告:

System.setSecurityManager(new SecurityManager());
  • Pack200 工具和 API:Pack200 是一种压缩和解压缩 JAR 文件的工具。在 JDK 11 中,Pack200 工具和相关的 API 被废弃了。这是因为 Pack200 工具在实际使用中并不常见,并且有更好的替代方案。

示例代码:在 JDK 11 中,如果你的代码中使用了 Pack200 相关的类和方法,如下面的代码,编译时会出现警告:

import java.util.jar.Pack200;public class Example {public static void main(String[] args) {Pack200.Unpacker unpacker = Pack200.newUnpacker();// ...}
}
  • 其他废弃的方法和类:JDK 11 还废弃了一些废弃已久的方法和类,如 Runtime.runFinalizersOnExit()Thread.stop(Throwable)。这些方法和类已经不推荐使用,并且在未来的 JDK 版本中可能会被移除。

示例代码:在 JDK 11 中,如果你的代码中使用了废弃的方法和类,如下面的代码,编译时会出现警告:

Runtime.runFinalizersOnExit(true);
Thread.stop(new Throwable());

请注意,以上示例代码仅用于说明在 JDK 11 中移除和废弃的功能,并不一定适用于所有的场景。在实际使用中,请参考 JDK 11 的官方文档和更具体的示例代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146794.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】super 关键字用法

目录 this与super区别 1.访问成员变量-示例代码 继承中构造方法的访问特点 2.访问构造方法-示例代码&#xff1a; 继承中成员方法访问特点 3.访问成员方法-示例代码&#xff1a; super 关键字的用法和 this 关键字相似 this : 代表本类对象的引用super : 代表父类存储空间…

使用 Elastic 输入包自定义你的数据摄取

作者&#xff1a;Ishleen Kaur Elastic 通过集成&#xff08;integrations&#xff09;实现了外部数据源和 Elastic Observability Solution 之间数据流的收集、转换和分析。 集成包通过封装多个组件来实现这一点&#xff0c;包括代理配置 (agent configuration)、数据收集输入…

利用DMA的触发循环实现eTMR的PWM周期计数

利用DMA的触发循环实现对eTMR的PWM周期计数 文章目录 利用DMA的触发循环实现对eTMR的PWM周期计数引言分析问题eTMR的调试模式ModulizationFTM的多次重载事件终极大招-使用触发链 解决问题确认DMAMUX中的eTMR相关触发源eTMR产生触发信号 软件总结参考文献 引言 最近在同客户一起…

Docker学习_镜像和容器篇

简介 Docker是一种容器化的技术&#xff0c;可以实现在一台宿主机电脑上运行多个不同的容器&#xff0c;每个容器之间都相互独立&#xff0c;具有完整的一套文件&#xff0c;网络和端口。 可以将其理解为一种虚拟机技术&#xff0c;只不过和VMware等虚拟化技术不同&#xff0…

【工具】idea 设置自动渲染注释

前言 需求&#xff1a;自动渲染文档注释&#xff0c;看源码更加舒服。 已知 crtl alt Q 可以 设置 尝试搜索 render&#xff0c;发现有启用 “渲染文档注释” 的地方 坐标 &#xff1a; Settings -> Editor-> Appearance

链表经典面试题(五)

求链表的公共结点 1.题目2.详细的图示3.详细注释和代码实现 1.题目 2.详细的图示 3.详细注释和代码实现 public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//定义两个表示长度的指针,让它们指向headA和headB//我们暂时无法知道哪…

14:00面试测试岗,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

ElementUI之首页导航+左侧菜单

文章目录 一、Mock.js1.1.什么是Mock.js1.2.安装与配置1.3使用 二、登录注册跳转2.1.在views中添加Register.vue2.2.在Login.vue中的methods中添加gotoRegister方法2.3.在router/index.js中注册路由 三、组件通信&#xff08;总线&#xff09;3.1 在main.js中添加内容3.2.在com…

分布式搜索引擎es-3

文章目录 数据聚合聚合的种类RestAPI实现聚合 自动补全自定义拼音分词器自动补全查询案例&#xff1a;实现酒店搜索框自动补全自动补全的javaAPI实现搜索框自动补全 口述自动补全数据同步集群集群的分布式存储集群分布式查询集群故障转移 数据聚合 什么是聚合&#xff1f; 聚合…

chrome extensions mv3通过content scripts注入/获取原网站的window数据

开发插件的都知道插件的content scripts和top window只共享Dom不共享window和其他数据&#xff0c;如果想拿挂载在window的数据还有点难度&#xff0c;下面会通过事件的方式传递cs和top window之间的数据写一个例子 代码 manifest.json 这里只搞了2个js&#xff0c;content.…

【前端】ECMAScript6从入门到进阶

【前端】ECMAScript6从入门到进阶 1.ES6简介及环境搭建 1.1.ECMAScript 6简介 &#xff08;1&#xff09;ECMAScript 6是什么 ECMAScript 6.0&#xff08;以下简称 ES6&#xff09;是 JavaScript 语言的下一代标准&#xff0c;已经在2015年6月正式发布了。它的目标&#xff…

Excel·VBA分列、字符串拆分

看到一篇博客《VBA&#xff0c;用VBA进行分列&#xff08;拆分列&#xff09;的2种方法》&#xff0c;使用VBA对字符串进行拆分 目录 Excel分列功能将字符串拆分为二维数组&#xff0c;Split函数举例 将字符串拆分为一维数组&#xff0c;正则表达式举例 Excel分列功能 Sub 测…

[NOIP2012 提高组] 国王游戏(贪心,排序,高精度)

[NOIP2012 提高组] 国王游戏 题目描述 恰逢 H 国国庆&#xff0c;国王邀请 n n n 位大臣来玩一个有奖游戏。首先&#xff0c;他让每个大臣在左、右手上面分别写下一个整数&#xff0c;国王自己也在左、右手上各写一个整数。然后&#xff0c;让这 n n n 位大臣排成一排&…

ssl证书 阿里的域名,腾讯云的证书

目录 1.腾讯云申请ssl免费证书 2.去阿里云进行解析 3.回到腾讯云 4.nginx的配置 说明&#xff1a;阿里云的免费证书用完了&#xff08;每年可以申请20个&#xff09;&#xff0c;还有个项目要用证书&#xff0c;第三方的证书免费的都是90天的。看了下腾讯云业可以申请免费的…

C++代码示例:排列数简单生成工具

文章目录 前言代码仓库内容代码&#xff08;有详细注释&#xff09;编译和运行命令结果总结参考资料作者的话 前言 C代码示例&#xff1a;排列数简单生成工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) …

数据集划分——train_test_split函数使用说明

当我们拿到数据集时&#xff0c;首先需要对数据集进行划分训练集和测试集&#xff0c;sklearn提供了相应的函数供我们使用 一、讲解 快速随机划分数据集&#xff0c;可自定义比例进行划分训练集和测试集 二、官网API 官网API sklearn.model_selection.train_test_split(*a…

Spring5 自定义标签开发

spring5 自定义脚本开发步骤 1 定义bean&#xff0c; public class User {private String id;private String userName;private String email;private String password;public String getId() {return id;}public void setId(String id) {this.id id;}public String getUser…

网络爬虫——urllib(2)

前言&#x1f36d; ❤️❤️❤️网络爬虫专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Python网络爬虫_热爱编程的林兮的博客-CSDN博客 前篇讲解了urllib的基本使用、一个类型六个方法与下载相关内容&#xff0…

云原生Kubernetes:K8S配置资源管理

目录 一、理论 1.Secret 2.Secret创建 3.Secret使用 4.Configmap 5.Configmap创建 6.Configmap使用 二、实验 1.Secret创建 2.Secret使用 3.Configmap创建 4.Configmap使用 三、问题 1.变量引用生成资源报错 2.查看pod日志失败 3.创建configmap报错 4.YAML创建…

好看的货架效果(含3D效果)

搭配thymeleaf layui合成 货架一 1. css #gudinghuojia2F .layui-row { display: flex; justify-content: space-between; height: 100%;} #gudinghuojia2F .layui-col-xs10 {margin-right: 4%;} #gudinghuojia2F .layui-col-xs10:last-child {margin-right: 0;} .inner-ti…