解读JDK11新特性

2023-11-06

本文主要介绍JDK11的部分新特性和新的API。

1、Local Var

在Lambda表达式中,可以使用var关键字来标识变量,变量类型由编译器自行推断。

public class LocalVar {
    public static void main(String[] args) {
        Arrays.asList("Java", "Python", "Ruby")
            .forEach((var s) -> {
                System.out.println("Hello, " + s);
            });
    }
}

2、HttpClient

长期以来,如果要访问Http资源,JDK的标准库中只有一个HttpURLConnection,这个API使用非常麻烦,而且已经不适用于最新的HTTP协议。JDK11的新的HttpClient支持HTTP/2和WebSocket,并且可以使用异步接口:

public class HttpApi {

    public static void main(String[] args) {
        HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.qq.com/")).GET().build();
        HttpResponse.BodyHandler<String> bodyHandler = HttpResponse.BodyHandlers.ofString();
        HttpClient client = HttpClient.newHttpClient();
        CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, bodyHandler);
        future.thenApply(HttpResponse::body).thenAccept(System.out::println).join();
    }
}

3、List API

对于List接口,新增了一个of(T...)接口,用于快速创建List对象:

List<String> list = List.of("Java", "Python", "Ruby");

ListtoArray()还新增了一个重载方法,可以更方便地把List转换为数组。可以比较一下两种转换方法:

// 旧的方法:传入String[]:
String[] oldway = list.toArray(new String[list.size()]);

// 新的方法:传入IntFunction:
String[] newway = list.toArray(String[]::new);

4、读写文件

Files类增加了writeString和readString两个静态方法,可以直接把String写入文件,或者把整个文件读出为一个String。这两个方法可以大大简化读取配置文件之类的问题

Files.writeString(
    Path.of("./", "tmp.txt"), // 路径
    "hello, jdk11 files api", // 内容
    StandardCharsets.UTF_8); // 编码
String s = Files.readString(
    Paths.get("./tmp.txt"), // 路径
    StandardCharsets.UTF_8); // 编码

5、String API

String新增了strip()方法,和trim()相比,strip()可以去掉Unicode空格,例如,中文空格:

String s = " Hello, JDK11!\u3000\u3000";
System.out.println("     original: [" + s + "]");
System.out.println("         trim: [" + s.trim() + "]");
System.out.println("        strip: [" + s.strip() + "]");
System.out.println(" stripLeading: [" + s.stripLeading() + "]");
System.out.println("stripTrailing: [" + s.stripTrailing() + "]");

输出如下:

     original: [ Hello, JDK11!  ]
         trim: [Hello, JDK11!  ]
        strip: [Hello, JDK11!]
 stripLeading: [Hello, JDK11!  ]
stripTrailing: [ Hello, JDK11!]

新增isBlank()方法,可判断字符串是不是“空白”字符串:

String s = " \u3000"; // 由一个空格和一个中文空格构成
System.out.println(s.isEmpty()); // false
System.out.println(s.isBlank()); // true

新增lines()方法,可以非常方便地按行分割字符串

String s = "Java\nPython\nRuby";
s.lines().forEach(System.out::println);

新增repeat()方法,可以指定重复次数:

System.out.println("-".repeat(10)); // 打印----------

除了新增的API外,JDK11还带来了EpsilonGC,就是什么也不做的GC,以及ZGC,一个几乎可以做到毫秒级暂停的GC。ZGC还处于实验阶段,所以启动它需要命令行参数-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

 

文章来源:https://www.liaoxuefeng.com/article/0015419379727788f4e146b6fb1409dbaa7ad35db2560fc000#0

 

让我们一起遨游在代码的海洋里!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解读JDK11新特性 的相关文章

  • mysql内存使用分析(一)

    author skate time 2012 02 16 mysql内存使用分析 从内存的使用方式来说 MySQL数据库的内存使用主要分为以下两类 1 线程独享内存 2 全局共享内存 1 线程独享内存 在MySQL 中 线程独享内存主要用于

随机推荐

  • ledcode----丢失的数字

    目录 题目截图 题目接口 第一种解法 思路 第二种解法 差值法 思路 第三种解法 位运算异或法 关于异或操作符的预备知识 思路 例子 输入数组 0 1 3 根据题目要求消失的数字就是2 n 3 结语 题目截图 题目接口 int missin
  • React事件处理机制

    1 react事件并没有绑定到dom节点上而是绑定到了document 然后由统一的事件处理程序来处理 同时基于浏览器的事件冒泡机制 所有节点的事件会在document上触发 2 原生事件阻止冒泡会阻止合成事件的触发 合成事件的阻止冒泡不会
  • 虚拟机VMware Tools安装步骤

    Vmware tools是虚拟机中一款超级增强工具 可以让我们更加方便使用虚拟机 能实现主机与虚拟机之间的文件共享 这篇文章主要介绍了虚拟机VMware Tools安装步骤 需要的朋友可以参考下 本人安装VMware Tools 的需求是
  • 多线程抽取数据库数据

    记录一次多线成抽取数据的方案 public void static main String args 每页大小 int pageSize 100 总记录数 int totalCount ProductDAO countAll 计算一共有多少
  • java中Date日期类型的大小比较

    1 通过Date提供的compareTo 进行比较 java util Date类实现了Comparable接口 可以直接调用Date的compareTo 方法来比较大小 String beginTime 2018 07 28 14 42
  • Vue框架--Ruoyi解析

    Ruoyi是一个基于Vue js和Spring Boot的开源企业级快速开发平台 它提供了一套完整的前后端分离的解决方案 下面对Ruoyi的主要特点和架构进行解析 8大流程 前端技术栈 Ruoyi使用了Vue js作为前端框架 采用了Ele
  • android组件悬浮,Android 滑动组件悬浮固定在顶部

    要想实现的效果是如下 场景 有些时候是内容中间的组件当滑动至顶部的时候固定显示在顶部 实现的思路 1 目标组件 button 有两套 放在顶部和内容中间 2 当内容中间的组件滑动至顶部栏位置时控制显示 隐藏顶部和中间的组件 涉及到组件获取在
  • c++json nlohmann 和 poco json 使用,boost

    C 使用nlohmann json 最好用的c json库是 nlohmann C 使用nlohmann json wphkadn的博客 CSDN博客 把变量写成json容易 可是把json变成变量就要复杂一点 不过对于nlohmann一点
  • adb devices 出现????

    1 ubantu下adb 的安装 1 安装 sudo apt get install android tools adb 2 查看是否安装成功 adb v 有信息表示成功 2 配置 2 1查找设备 1 看adb 是否识别安卓设备 插入usb
  • iOS设备自动登录汕大校园网认证 一次设置永久免登录

    介绍 本文将介绍如何在苹果设备 Mac iPad iPhone 上使用捷径 Shortcuts 来使设备每次连接校园网WiFi后自动使用校园网账号登录 以及一键查询流量情况 当然 你也可以创建快捷方式在桌面以便掉线时一键重连 无须再前往浏览
  • 八道练习题教你轻松学会运用Unity中的协程用法

    携程 协程是什么 协程有什么用 为什么要用携程 练习题与讲解 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 要点总结 协程是什么 简单来说 协程就是Unity官方提供的一个类似于C 中多线程的功能 可以在组件中使用 即继承
  • Java-钉钉订阅事件

    文章目录 背景 什么是钉钉订阅事件 钉钉订阅事件的应用场景 整体思路 查看钉钉文档 什么是钉钉回调 钉钉回调具体实操 创建自己的应用 钉钉回调 开发过程中遇到的问题 总结 背景 最近需要做一个业务 钉钉组织架构下添加人员之后 要对该人员的数
  • 班级排名

    import java util Arrays import java util LinkedList import java util List import java util Scanner public class Main pub
  • 【C++入门到精通】C++入门—缺省参数、函数重载

    目录 前言 一 缺省参数 1 缺省参数的概念 2 缺省参数分类 全缺省参数 半缺省参数 二 函数重载 1 函数重载的概念 2 函数重载类型 参数类型不同 参数个数不同 参数类型顺序不同 C 支持函数重载的原理 名字修饰 name Mangl
  • CDH 1、CDH简介

    1 Apache Hadoop 不足之处 版本管理混乱 部署过程繁琐 升级过程复杂 兼容性差 安全性低 2 Hadoop 发行版 Apache Hadoop Cloudera s Distribution Including Apache
  • 将单个字节数据读取到一个float类型的数据中---的几种方法

    从串口读取传感器值的时候总是一个一个字节 高八位低八位 需要拼接成一个float或者int的时候 这些方法有用处 1 联合体方式 union float f unsigned char x 4 data data x 0 0xA2 data
  • Eslint如何不忽略node_modules里检测(vue+webpack项目)

    背景 我们项目里的业务组件是以单独的仓库子模块的形式 通过安装包的形式install到主项目里node modules里的 主项目是开启了eslint检测的 但是发现对node modules里的内容是不起作用的 但因为公司的质量检测组要扫
  • Chrome利器之FireShot:网页长截图工具

    首先对于很多写博客写文章的笔友来说 难免少不了一些网页截图或者gif图之类的 现在这里讲的是一个便捷的谷歌浏览器长截图插件 FireShot FireShot功能特点 可以截取整个页面 可见部分和选定区域 并且支持拖动加载截图 非常方便 下
  • python logging 不输出控制台_解决Python logging模块无法正常输出日志的问题

    废话少说 先上代码 File logger conf formatters keys default formatter default format asctime s name s levelname s message s class
  • 解读JDK11新特性

    本文主要介绍JDK11的部分新特性和新的API 1 Local Var 在Lambda表达式中 可以使用var关键字来标识变量 变量类型由编译器自行推断 public class LocalVar public static void ma