大多数开发者还是沉浸在 Java 8 中,而 Java 14 将要在 2020 年 3 月 17 日发布了,而我还在写着 Java 11 的新特性。Java 11Java 8 之后的第一个 LTS 版本,但是也自从 Java 11 开始, Oracle JDK 不再可以免费的用于商业用途,当然如果你是个人使用,或者是使用 Open JDK ,那么还是可以免费使用的。

有些人很关心 Java 11 是否收费,Oracle 表示除非你在生产中使用,否则可以不用收费。

即使收费,免费的 Open JDK 不也很香吗。

可免费用于生产环境的 Open JDK 官网:https://jdk.java.net/11/

再 6 个月后,Java 15 都要来了,这种发布节奏不仅让人有点应接不暇,更有点眼花缭乱。但是不管怎么说,发展的趋势不可逆,所以补习一波 Java 11 也是很有必要的。

1. String API

字符串绝对是 Java 中最常用的一个类了,String 类的方法使用率也都非常的高,在 Java 11 中又为 String 类带来了一系列的好用操作。

  1. isBlank() 判空。

    // 判空,blank里我放入了全角空格,半角空格,TAB
    String blank = "   ";
    System.out.println(blank.isBlank()); // 输出
    // true
  2. lines() 分割获取字符串流。

    // lines 返回一个 Stream
    String line = "a\nb\nc";
    Stream<String> lines = line.lines();
    // 使用 lambda 遍历
    lines.forEach(System.out::println); // 输出
    // a
    // b
    // c
  3. repeat() 复制字符串

    // 复制字符串
    String repeat = "我的微信:wn8398,";
    String repeat3 = repeat.repeat(3);
    System.out.println(repeat3); // 输出
    // 我的微信:wn8398,我的微信:wn8398,我的微信:wn8398,
  4. strip() 去除前后空白字符。

    // 去除前后空白
    String strip = "   https://www.wdbyte.com  ";
    System.out.println("==" + strip.trim() + "==");
    // 去除前后空白字符,如全角空格,TAB
    System.out.println("==" + strip.strip() + "==");
    // 去前面空白字符,如全角空格,TAB
    System.out.println("==" + strip.stripLeading() + "==");
    // 去后面空白字符,如全角空格,TAB
    System.out.println("==" + strip.stripTrailing() + "=="); // 输出
    // ==  https://www.wdbyte.com  ==
    // ==https://www.wdbyte.com==
    // ==https://www.wdbyte.com  ==
    // ==   https://www.wdbyte.com==

    这里注意,trim 只能去除半角空格,而 strip去除各种空白符

2. File API

读写文件变得更加方便。

// 创建临时文件
Path path = Files.writeString(Files.createTempFile("test", ".txt"), "https://www.wdbyte.com");
System.out.println(path);
// 读取文件
// String ss = Files.readString(Path.of("file.json"));
String s = Files.readString(path);
System.out.println(s); // 结果
// https://www.wdbyte.com

3. JEP 321 - HTTP Client

Java 11 中 Http Client API 得到了标准化的支持。且支持 HTTP/1.1 和 HTTP/2 ,也支持 websockets。

你可以像这样发起一个请求。

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.hao123.com"))
.build();
// 异步
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join(); // 同步
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

更多的如同步异步请求,并发访问,设置代理等方式,可以参考 OpenJDK 官方文档。

http://openjdk.java.net/groups/net/httpclient/recipes-incubating.html

你现在还需要各种 HTTP Client 依赖包吗?

4. JEP 323 - Lambda 局部变量推断

Java 10 中引入了 var 语法,可以自动推断变量类型。在 Java 11 中这个语法糖可以在 Lambda 表达式中使用了。

var hashMap = new HashMap<String, Object>();
hashMap.put("wechat", "wn8398");
hashMap.put("website", "https://www.wdbyte.com");
hashMap.forEach((var k, var v) -> {
System.out.println(k + ": " + v);
});

这里需要注意的是,(var k,var v) 中,k 和 v 的类型要么都用 var ,要么都不写,要么都写正确的变量类型。而不能 var 和其他变量类型混用。

5. JEP 330 - 单命令运行 Java

自从学习 Java 的第一天,我们就知道运行一个 Java 文件,要先用 javac 命令编译,再用 java 命令运行,而现在只要一个 java 命令就可以运行了。

$ cat Main.java

public class Main {

    public static void main(String[] args) {
System.out.println("wechat:wn8398");
}
} $ java Main.java
wechat:wn8398

6. 免费的飞行记录器

商业版 JDK 中一直有一款低开销的事件信息收集工具,也就是飞行记录器(Java Flight Recorder),它可以对 JVM 进行检查、分析、记录等。当出现未知异常时可以通过记录进行故障分析。这个好用的工具在 Java 11 中将开源免费。所有人都可以使用这个功能了。

其他更新

  1. JEP 309 - 添加动态文件常量。
  2. JEP 318 - 添加 Epsilon 垃圾收集器。
  3. JEP 320 - 删除 Java EE 和 corba 模块(java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind)。
  4. JEP 329 - 增加加密算法 chacha20,poly1305 的实现。
  5. JEP 333 - 引入实验性的 ZGC 垃圾收集器,保证停摆时间不会超过 10ms。
  6. JEP 335 - 废弃 Nashorn JavaScript 引擎

文章案例都已经上传到 Github:niumoo/jdk-feature

系列往期

<完>

这篇文章是我的原创文章。如果你也喜欢,可以关注公众号【未读代码】,不断推送【原创文章】与你分享。

最通俗易懂的 Java 11 新特性讲解的更多相关文章

  1. 最通俗易懂的 Java 10 新特性讲解

    自从 Java 9 开始,Oracle 调整了 Java 版本的发布策略,不再是之前的 N 年一个大版本,取而代之的是 6 个月一个小版本,三年一个大版本,这样可以让 Java 的最新改变迅速上线,而 ...

  2. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  3. 【整理】Java 11新特性总结

    闲语 2018年9月25日,Java 11正式发布,与JDK 10不同,JDK 11将提供长期支持,还将作为Java平台的参考实现以及标准版(Java SE)11.Oracle直到2023年9月都会为 ...

  4. Java 12 新特性介绍,快来补一补

    Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...

  5. Java 8 新特性终极版

    声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...

  6. 【整理】Java 8新特性总结

    闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...

  7. C++11新特性总结 (二)

    1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...

  8. AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API ...

  9. [转载] C++11新特性

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

随机推荐

  1. WPS隐藏文档修订显示的方法

  2. [USACO09DEC]雪橇Bobsledding(贪心)

    https://www.luogu.org/problem/P2968 题目描述 Bessie has entered a bobsled competition because she hopes ...

  3. 吴裕雄--天生自然python学习笔记:python 用pygame模块基本绘图

    绘制几何图形是游戏包的基本功能,很多游戏角色都是由基本图形组合而成的 . 绘制矩形: pygame.draw.rect Pygam巳绘制矩形的语法为: 用基本绘图绘制一个人脸 用基本绘图功能绘制人脸 ...

  4. Estimating Gene Frequencies| method of maximum likelihood|point estimate

    I.11 Estimating Gene Frequencies 在小样本上计算基因A的概率PA,举例如下: 通过加大样本会将通过观察值得到的数趋近于真实数据,所以该问题转化为了统计学上利用大量观察值 ...

  5. SpringBoot 系列 - 自己写starter

    原文地址: https://www.xncoding.com/2017/07/22/spring/sb-starter.html 前言: Spring Boot由众多Starter组成,随着版本的推移 ...

  6. 71)PHP,使用cookie的语法问题

    1) 为啥用数组的形式,就是这样好区分,你看都是跟student相关的东西, (2)

  7. springboot学习笔记:10.springboot+atomikos+mysql+mybatis+druid+分布式事务

    前言 上一篇文章我们整合了springboot+druid+mybatis+mysql+多数据源: 本篇文章大家主要跟随你们涛兄在上一届基础上配置一下多数据源情况下的分布式事务: 首先,到底啥是分布式 ...

  8. CF-552E-Two Teams

    pro:给出n, k和长度为n的数组a, 两个人轮流取数1先取,设a[i]是当前数组中最大值,则取走a[i - k]到a[i + k]这段数,然后把a[i + k + 1]和后面的补到 a[i - k ...

  9. 林轩田机器学习基石笔记1—The Learning Problem

    机器学习分为四步: When Can Machine Learn? Why Can Machine Learn? How Can Machine Learn? How Can Machine Lear ...

  10. rancher2.0快速入门

    注意:本入门指南的目的是让您快速的运行一个Rancher2.0环境,它不适用于生产.有关更全面的说明,请查阅Rancher安装. 本教程将指导您完成: 安装Rancher v2.0 : 创建第一个集群 ...