探索 JDK 11 的新特性:迈向 Java 平台的下一个里程碑

随着时间的推移,Java 平台一直在不断演进和改进,为开发人员提供更好的工具和功能。JDK 11 是 Java 平台的一个重要版本,引入了许多新的特性和改进,为开发人员带来了全新的体验和可能性。本文将介绍 JDK 11 中一些重要的新特性,以及它们对 Java 开发的影响。

1.局部变量类型推断(Var 关键字)

JDK 11 引入了局部变量类型推断,允许使用 var 关键字声明局部变量而无需显式指定变量类型。这样可以简化代码,提高开发效率,同时不会影响代码的可读性和健壮性。例如:

package cn.qiang.tmall.admin.mall.demo;

/**
 * @author :Nan Yang
 * @version :V1.0
 * @program :Software development
 * @date :2024/3/26 23:06
 * @description :新的变量定义
 */
public class VariableDefinitions {
    public static void main(String[] args) {
        //以前的变量定义
        int a = 40;
        int b = 50;
        //基于jdk11的变量定义,编译器会自动推断变量的类型
        var x = 40;
        var y = 50;
    }
}

在上面的示例中,var 关键字用于声明一个 ArrayList 类型的变量 list,编译器会根据右侧的表达式自动推断出变量的类型。

当然针对初始化也有一些区别,如下所示:

注意成员变量的定义是不允许的:

这样循环也行:

import java.util.List;

/**
 * @author :Nan Yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 0:10
 * @description :JDK11新特性
 */
public class VariableDefinitions {
    public static void main(String[] args) {
        //of静态方法属于JDK9新增
        var list1 = List.of("雷神", "风神", "火神", "水神");
        var list2 = List.of("草神", "男主", "女主");
        var list3 = List.of("雷神", "风神", "火神", "水神", "草神", "男主", "女主");
        var newList = List.of(list1, list2, list3);
        for (var list : newList) {
            for (var item : list) {
                System.out.println(item);
            }
        }
    }
}

2.HTTP 客户端增强

JDK 11 提供了一个标准化的 HTTP 客户端 API,支持异步和同步请求,并包含对 HTTP/2 和 WebSocket 的原生支持。这使得在 Java 应用程序中进行 HTTP 请求变得更加灵活和高效。

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.example.com"))
        .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

在这个示例中,我们创建了一个新的 HttpClient 对象,并使用它发送了一个 HTTP GET 请求到指定的 URL。随后,我们可以通过 response.body() 获取服务器返回的响应体内容。

3.支持源文件直接运行(无需javac)

在JDK11中支持源文件直接运行,不用再执行javac命令了:

import java.util.List;

/**
 * @author :Nan Yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 0:10
 * @description :JDK11新特性
 */
public class VariableDefinitions {
    public static void main(String[] args) {
        //of静态方法属于JDK9新增
        var list1 = List.of(1,2,3,4,5);
        var list2 = List.of(6,7,8,9);
        var list3 = List.of(1,2,3,4,5,6,7,8,9);
        var newList = List.of(list1, list2, list3);
        for (var list : newList) {
            for (var item : list) {
                System.out.println(item);
            }
        }
    }
}

4.FileInputStream的增强

jdk11提供了一个关于FileInputStream文件快速copy的方法,如下图所示:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author :nan_yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 0:27
 * @description :
 */
public class FileStreamDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("D:\\Code\\a.txt");
        FileOutputStream fos = new FileOutputStream("D:\\Code\\b.txt");
        //快速简单的将a.txt文件内容复制到b.txt
        fis.transferTo(fos);
    }
}

5.关于FIles类提供的静态方法

Files类提供了一个静态方法readString(),用于快速读取文件的内容;同时也提供了一个静态方法writeString(),用于快速写出一个字符串数据到文件。



/**
 * @author :nan_yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 0:36
 * @description :
 */
public class FileStaticDemo {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("D:\\Code\\a.txt");
        String str = Files.readString(path);
        System.out.println("读取的内容:" + str);
        Path path2 = Paths.get("D:\\Code\\b.txt");
        Files.writeString(path2, "大家好,我是八重樱!");
    }
}

6.针对String提供的新功能

从jdk11开始,String提供了isBlank(),strip(), stripLeading(), stripTrailing()等方法:

/**
 * @author :nan_yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 0:43
 * @description :针对String提供的新功能
 */
public class StringDemo {
    public static void main(String[] args) {
        String str = " ";
        //结果为true
        boolean blank = str.isBlank();
        String str2 = " soft ";
        //去掉两端空格
        String strip = str2.strip();
        System.out.println(strip);
        String stripHeader = " soft ";
        //去掉头部空格
        String stripLeading = stripHeader.stripLeading();
        System.out.println(stripLeading);
        String stripTrailing = " soft ";
        //去掉尾部空格
        String stripTrailing2 = stripTrailing.stripTrailing();
        System.out.println(stripTrailing2);
        //将字符串内容复制5次,组合成新的字符串
        String repeat = str2.repeat(5);
        System.out.println(repeat);
    }
}

进入源码发现比如类似isBlank这样的方法的确实在jdk11开始出现的:

7.针对单列集合以及双列集合的增强

集合提供了快速复制的方法copy()等:

import java.util.List;
import java.util.Map;

/**
 * @author :nan_yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 0:56
 * @description :针对单列集合以及双列集合的增强
 */
public class ListDemo {
    public static void main(String[] args) {
        //针对单列集合以及双列集合的增强
        var list = List.of("琪亚娜","八重樱","芽衣");
        var newList1 = List.copyOf(list);
        System.out.println(list);
        System.out.println(newList1);

        //双列集合
        var map = Map.of("琪亚娜","100分","八重樱","110分");
        var newMap = Map.copyOf(map);
        System.out.println(map);
        System.out.println(newMap);
    }
}

8.对于Stream的功能扩展

Stream中新增了takeWhile()和dropWhile()截止结算的方法:

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author :nan_yang
 * @version :V1.0
 * @program :Software
 * @date :2024/3/27 1:01
 * @description :对于Stream的功能扩展
 */
public class StreamDemo {
    public static void main(String[] args) {
        var list = List.of("琪亚娜","八重樱","芽衣");

        // 从集合中删除满足条件的元素,直到不满足为止
        var newList = list.stream()
                .dropWhile( name -> name.equals("琪亚娜"))
                .collect(Collectors.toList());
        System.out.println(newList);

        // 从集合中获取满足条件的元素,直到不满足为止
        var newList2 = list.stream()
                .takeWhile( name -> name.equals("琪亚娜"))
                .collect(Collectors.toList());
        System.out.println(newList2);
    }
}

9.对于JDK11出现的新GC(ZGC)

Java 11新增了一个全新的垃圾收集器--ZGC,它由Oracle开发,宣传可以在数TB的堆上具有非常低的暂停时间。

其实在Java10中已经有四种发布多年的垃圾收集器,并且几乎都是无限可调的,那又为什么会新增一个GC呢?换个角度看,G1是2006年时引入Hotspot VM的。当时最大的AWS实例有1 vCPU和1.7GB内存,而今天AWS很乐意租给你一个x1e.32xlarge实例,该类型实例有128个vCPU和3,904GB内存。

ZGC的设计目标是:支持TB级内存容量,暂停时间低(<10ms),对整个程序吞吐量的影响小于15%。将来还可以扩展实现机制,以支持不少令人兴奋的功能,例如多层堆(即热对象置于DRAM和冷对象置于NVMe闪存),或压缩堆。

zgc在进行对象转移的过程中,只需要修改对象指针的几个标志位,相对于g1需要在对象转移时读取对象头来说,少了内存读取的操作,速度更快。不过也正是由于zgc使用了对象指针的几个标志位来完成并发标识和并发转移等的工作,所以zgc不能压缩指针,并且只能运行在基于64位的操作系统上。

zgc的内存区域分成三个页面,小页面2M,中页面32M,大页面2的n次方,而g1页面一般分成2048个region,每个region大小是2M/4M/8M。

10.基于垃圾回收器的 Epsilon 内存分配器

JDK 11 引入了 Epsilon 内存分配器,这是一种实验性的垃圾回收器,适用于对垃圾回收器行为进行压力测试和性能基准测试的场景。Epsilon 内存分配器可用于禁用垃圾收集,从而帮助开发人员更好地理解其应用程序的内存使用情况。

11.其他改进和更新

除了上述新特性外,JDK 11 还包括了诸多其他改进和更新,如对 Lambda 参数的语法支持、新的垃圾收集器接口、动态类文件常量等。这些改进为 Java 平台带来了更好的性能、可维护性和安全性。

通过充分利用 JDK 11 提供的这些新特性,开发人员可以更加高效地编写现代化的 Java 应用程序,并且为未来的发展做好充分准备。希望以上介绍对您有所帮助,欢迎尝试并探索 JDK 11 中更多的功能和改进!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础语法--快速入门

目录 一、字面量1.1定义 二、关键字三、注释四、引号五、输入输出六、缩进七、数据类型转换八、标识符九、运算符 一、字面量 1.1定义 字面量&#xff1a;在代码中&#xff0c;被写下来的固定的值。 python中哪些值可以被写下来&#xff0c;如何在代码中写他们呢&#xff1f;…

JavaWeb开发-前端HTML基础

1.HTML的基本语法 HTML是什么&#xff1f;&#xff1a;HTML是一种超文本标记语言&#xff0c;负责网页的结构&#xff0c;设计页面的元素内容等 超文本&#xff1a;超越文本限制&#xff0c;除了文本信息&#xff0c;还可以定义图片&#xff0c;音频&#xff0c;视频等标记语言…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 5 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

中科数安 || 公司办公文件资料加密、防泄密管理软件系统

#文件防泄密软件# 中科数安提供专业的公司文件资料加密与防泄密管理系统&#xff0c;这套软件主要服务于企业用户&#xff0c;以强化内部信息安全、防止重要数据泄露为核心目标。 中科数安 | 电脑文件防泄密软件 PC地址&#xff1a; www.weaem.com 该系统具备以下功能特性&a…

如何解决kafka rebalance导致的暂时性不能消费数据问题

文章目录 背景思考答案排它故障转移共享 背景 之前在review同组其它业务的时候&#xff0c;发现竟然把kafka去掉了&#xff0c;问了下原因&#xff0c;有一个单独的服务&#xff0c;我们可以把它称为agent&#xff0c;就是这个服务是动态扩缩容的&#xff0c;会采集一些指标&a…

格瑞纳电子邀您参观2024杭州快递物流展

2024长三角快递物流供应链与技术装备展览会 2024.7.8-10 杭州国际博览中心 参展企业介绍 北京格瑞纳电子产品有限公司是一家立足于专业科学技术领域集产品代理、培训咨询和个性化增值服务的高科技公司&#xff0c;于2009年成立于北京&#xff0c;立足于复杂系统仿真领域&…

水电站泄洪预警广播系统方案

一、行业背景 近年来由于危险河道管理措施不到位&#xff0c;调峰电站泄水风险长期存在&#xff0c;信息通报制度缺失以及民众安全警觉性不高等因素导致的水电站在泄洪时冲走下游河道游客以及人民财产的事故频发。 我司通过物联网、云计算、大数据、人工智能等技术手段&#x…

随机链表的深拷贝

目录 一、何为深拷贝&#xff1f; 二、题目 三、思路 1.拷贝节点插入到原节点后面 2.控制拷贝节点的random 3.脱离原链表 : 尾插的思想 四、代码 五、附加 一、何为深拷贝&#xff1f; 一个引用对象一般来说由两个部分组成&#xff1a;一个具名的Handle&#xff0c;也就…

一键跳过开屏广告,这下舒服了

现在的app开屏广告越来越过分了&#xff0c;不小心摇一摇翻转就点开广告了。 今天分享个强大的自动跳过广告https://github.com/gkd-kit/gkd&#xff0c;李跳跳替代品&#xff0c;下载地址在公众号后台对话框回复 广告 玩转互联网达人 苏生不惑备用号&#xff0c;分享各种黑科…

初探Notion安装与使用

笔记工具哪家强&#xff0c;有道云笔记&#xff0c;印象笔记&#xff0c;记事本&#xff0c;notion 第一步、下载与安装 本次选择是window版本&#xff0c;下载地址【Notion官网】 版本为Notion Setup 3.3.0&#xff0c;软件大小74.3M&#xff0c;官网如下图所示。 进入登录…

159.乐理基础-和声模板是什么?优缺点与运用要点

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里&#xff0c;这里面有五线谱对应的音名&#xff0c;对比着看 如果一章没落下&#xff0c;看到这里&#xff0c;但是看不懂什么意思&#xff0c;那就强行下看&#xff0c;看着看着指不…

第一个C++程序,我也没看明白,暂时。

#include<iostream> using namespace std; int main() { cout << "hello world and you too number!" << endl; system("pause"); return 0; } 运行结果为&#xff1a;

编程语言|C语言——C语言实现玫瑰花(情人节)

1.说明 在古希腊神话中&#xff0c;玫瑰花集爱与美于一身&#xff0c;既是美神的化身&#xff0c;又溶进了爱神的血液&#xff0c;所以它所代表的含义是爱情。 我们应该用玫瑰花来表达我们的爱意&#xff0c;但是好多的恋人都是因为异地而没有办法去买一束新鲜的玫瑰去送给自己…

MySql实战--深入浅出索引(上)

提到数据库索引&#xff0c;我想你并不陌生&#xff0c;在日常工作中会经常接触到。比如某一个SQL查询比较慢&#xff0c;分析完原因之后&#xff0c;你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引&#xff0c;索引又是如何工作的呢&#xff1f;今天就…

java高级面试题整理 - 2024

Java 创建对象有几种方式 在Java中&#xff0c;有以下几种常见的方式来创建对象&#xff1a; 使用new关键字&#xff1a;这是最常见的创建对象的方式。通过调用类的构造函数&#xff0c;使用new关键字可以在内存中分配一个新的对象。使用反射&#xff1a;Java的反射机制允许在…

HTML(二)---【常见的标签使用】

零.前言 本文只介绍常见的标签使用&#xff0c;其中使用的一些HTML专业术语可以在作者的第一篇文章&#xff1a; HTML&#xff08;一&#xff09;---【基础】-CSDN博客中找到。 一.<b>粗体、<i>或<em>斜体 1.定义 粗体、斜体的实现可以在CSS中实现&…

Linux网络协议栈从应用层到内核层③

文章目录 1、write源码剖析2、vfs层进行数据传输3、socket层进行数据传输4、tcp层进行数据传输5、ip层进行数据传输6、网络设备层进行数据传输7、网卡驱动层进行数据传输8、数据传输的整个流程 1、write源码剖析 系统调用原型 ssize_t write(int fildes, const void *buf, si…

windows@浏览器主页被篡改劫持@360篡改主页@广告和弹窗设置@极速版

文章目录 360篡改浏览器主页方法1锁定浏览器主页 方法2注册表修改 360广告和弹窗360极速版 小结 360篡改浏览器主页 如果您使用360,且不想卸载它,那么当你启动360后,它可能会篡改你的浏览器(比如edge)的主页start page为360早期可能是通过修改快捷方式的target等属性,但是现在…

淘宝商品详情接口:解锁淘宝海量商品信息的秘密武器!

淘宝商品详情接口技术详解 淘宝作为中国最大的电子商务平台之一&#xff0c;其开放平台提供了丰富的API接口供开发者使用&#xff0c;以便第三方应用能够与淘宝平台无缝对接&#xff0c;实现数据交互和业务逻辑。其中&#xff0c;商品详情接口是众多API中非常重要的一项&#…

【LeetCode热题100】102. 二叉树的层序遍历(二叉树)

一.题目要求 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1…