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

news2024/11/28 12:33:44

在这里插入图片描述

一、前言

上一期讲了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")); // true
        System.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.coloradmin.cn/o/1055633.html

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

相关文章

【STM32基础 CubeMX】定时器的使用

文章目录 前言一、定时器是什么二、CubeMX配置定时器三、代码分析3.1 CubeMX代码分析3.2 几个库函数以中断的方式开启定时器定时器中断函数 四、定时器应用4.1 定时器闪烁LED 总结 前言 在嵌入式系统开发中&#xff0c;精确地控制时间和时序是至关重要的。STM32微控制器提供了…

错误:F13 is an invalid placement site

在vivado中绑定引脚时提示&#xff1a;F13 is an invalid placement site f13引脚在板子上是接千兆网的rxclk端的。在进一步不排查出现这样的问题提示 Illegal to place instance u_gmii_to_rgmii/u_rgmii_rx/BUFIO_inst on site TIEOFF_X0Y326. The location site type (TIEOF…

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

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

Java编程技巧:跨域

目录 1、跨域概念2、后端CORS&#xff08;跨域资源共享&#xff09;配置原理3、既然请求跨域了&#xff0c;那么请求到底发出去没有&#xff1f;4、通过后端CORS&#xff08;跨域资源共享&#xff09;配置解决跨域问题代码4.1、SpringBoot&#xff08;FilterRegistrationBean&a…

鼠标移动视差玻璃态效果

效果展示 页面结构组成 从页面上可以看到页面的结构比较简单&#xff0c;主要的元素如下&#xff1a; 背景图片文字带有清晰中心圆的毛玻璃 但是在怎么组织这几个元素的层次关系就需要需要考虑一下&#xff0c;并且中间的圆怎么实现也是需要考虑的。 CSS 知识点 clip-path…

【红外图像】利用红外图像处理技术对不同制冷剂充装的制冷系统进行性能评估(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

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

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

基于微信小程序的二手闲置交易市场小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

基于SpringBoot的仿京东商城系统

前台部分实现效果截图 后台部分实现效果截图 源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87647905

以太网协议介绍(ARP、UDP、ICMP、IP)

以太网协议介绍 一、ARP协议 请求&#xff1a; 应答&#xff1a; ARP协议&#xff1a; 0x0001 0x0800 6 4硬件类型&#xff1a;2个字节&#xff0c;arp协议不仅能在以太网上运行还能在其他类型的硬件上运行。以太网用1来表示&#xff1b; 协议类型&#xff1a;两字节。指的是a…

Xilinx AXI DataMover使用说明与测试

Xilinx AXI DataMover使用说明与测试 1 架构说明2 IP设置说明2.1 接口说明2.2 设置说明 3 测试说明3.1 S2MM测试3.2 MM2S测试 本文主要介绍Xilinx AXI DataMover的使用和测试方法。 1 架构说明 在Xilinx的数据传输总线中&#xff0c;AXI Memory Map接口和AXI Stream接口是最常…

Java Spring拦截器优化实践: 专注于API路径拦截

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Spring IOC之AnnotationConfigApplicationContext

博主介绍:✌全网粉丝近5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus…

C进阶 -- 自定义类型

&#x1f3c6;结构体 &#x1f36d;✨&#x1f387;&#x1f386;&#x1f645;‍♀️ &#x1f36d;结构体是一些值的集合&#xff0c;这些值称为 成员变量。结构的每个成员可以是不同的变量。 &#x1f947; 结构体类型的声明 struct Student {int age;//成员变量 }stu;/…

Rn页面滚动显示隐藏head动画

完整代码 import { View, Text, StyleSheet, Animated } from react-native export default () > {const opacity new Animated.Value(0)const handleScroll Animated.event([{ nativeEvent: { contentOffset: { y: opacity } } }],{ useNativeDriver: true })return (&l…

LSTM+CRF模型

今天讲讲LSTM和CRF模型&#xff0c;LSTM&#xff08;长短期记忆&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;模型&#xff0c;用于处理序列数据、时间序列数据和文本数据等。LSTM通过引入门控机制&#xff0c;解决了传统RNN模型在处理长期依赖关系时的困难…

JavaSE | 初识Java(一) | JDK \ JRE \ JVM

Java初识 Java 是一门半编译型、半解释型语言。先通过 javac 编译程序把源文件进行编译&#xff0c;编译后生成的 .class 文件是由字节 码组成的平台无关、面向 JVM 的文件。最后启动 java 虚拟机 来运行 .class 文件&#xff0c;此时 JVM 会将字节码转换成平台能够理…

【C语言深入理解指针(3)】

1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; ⼀般使⽤: int main() {char ch w;char *pc &ch;*pc w;return 0; }还有⼀种使⽤⽅式如下&#xff1a; int main() {const char* pstr "hello bit.";//这⾥是把⼀个字符串放到ps…

链表经典面试题(五)

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