Java11 新特性

新增字符串处理方法

新增方法:

  • 判断字符串是否为空白 " ".isBlank(); // true
  • 去除首尾空白 " Javastack ".strip(); // "Javastack"
  • 去除尾部空格 " Javastack ".stripTrailing(); // " Javastack"
  • 去除首部空格 " Javastack ".stripLeading(); // "Javastack "
  • 复制字符串 "Java".repeat(3);// "JavaJavaJava"
  • 行数统计 "A\nB\nC".lines().count(); // 3

Optional 加强

很方便的将一个 Optional 转换成一个 Stream, 或者当一个空 Optional 时给它一个替代的。

局部变量类型推断升级

在 Java11 中,在 var 上可以添加注解的语法格式。

//错误的形式: 必须要有类型, 可以加上var
//Consumer<String> con1 = (@Deprecated t) ->
System.out.println(t.toUpperCase()); //正确的形式:
//使用var的好处是在使用lambda表达式时给参数加上注解。
Consumer<String> con2 = (@Deprecated var t) ->
System.out.println(t.toUpperCase());

全新的 HTTP 客户端 API

HTTP,用于传输网页的协议,早在 1997 年就被采用在目前的 1.1 版本中。直到 2015 年,HTTP2 才成为标准。

HTTP/1.1HTTP/2主要区别如何在客户端和服务器之间构建和传输数据

  • HTTP/1.1 依赖于请求/响应周期;
  • HTTP/2 允许服务器 “push” 数据:它可以发送比客户端请求更多的数据。这使得它可以优先处理并发送对于首先加载网页至关重要的数据。

在 Java11 中,增加了处理 HTTP 请求的的 HTTP Client API,该 API 支持同步和异步。它将替代仅适用于 blocking 模式的 HttpURLConnection

(HttpURLConnection是在HTTP 1.0的时代创建的,并使用了协议无关的方法),并提供对 WebSocketHTTP/2 的支持。

package parzulpan.com.java11;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException; /**
* @Author : parzulpan
* @Time : 2020-11-30
* @Desc : Java11 全新的 HTTP 客户端 API
*/ public class HttpTest {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build();
HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString(); // 同步
HttpResponse<String> response = client.send(request, responseBodyHandler);
String body = response.body();
System.out.println(body); // 异步
CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, responseBodyHandler);
sendAsync.thenApply(HttpResponse::body).thenAccept(System.out::println);
HttpResponse<String> response1 = sendAsync.get();
String body1 = response1.body();
System.out.println(body1);
} catch (IOException | InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}

更简化的编译运行程序

要运行一个 Java 源代码必须先编译,再运行,两步执行动作。

在 Java 11 中,通过一个 java 命令就直接搞定了,如以下所示:java Javastack.java

一个命令编译运行源代码的注意点:

  • 执行源文件中的第一个类, 第一个类必须包含主方法
  • 并且不可以使用其它源文件中的自定义类, 本文件中的自定义类是可以使用的。

废弃 Nashorn 引擎

在 Java 11 中,废除 Nashorn javascript 引擎,在后续版本准备移除掉,有需要的可以考虑使用 GraalVM。

ZGC

ZGC(A Scalable Low-Latency Garbage Collector,可扩展的低延迟垃圾收集器),是一个并发, 基于 region, 压缩型的垃圾收集器, 只有 root 扫描阶段会 STW(stop the world), 因此 GC 停顿时间不会随着堆的增长和存活对象的增长而变长。

优势:

  • GC 暂停时间不会超过 10ms;
  • 既能处理几百兆的小堆, 也能处理几个 T 的大堆;
  • 和 G1 相比, 应用吞吐能力不会下降超过 15%;
  • 为未来的 GC 功能和利用 colord 指针以及 Load barriers 优化奠定基础;
  • 初始只支持 64 位系统;

总结和练习

【Java基础】Java11 新特性的更多相关文章

  1. Java基础-Java8新特性

    一.Lambda表达式 在了解 Lambda 之前,首先回顾以下Java的方法. Java的方法分为实例方法,例如:Integer的equals()方法: public final class Int ...

  2. java基础---java8 新特性

    1. 函数式接口 函数式接口主要指只包含一个抽象方法的接口,如:java.lang.Runnable(java1.0).java.util.Comparator接口(java1.4)等. Java8提 ...

  3. [转] Java 8的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  4. Java 8的新特性—终极版

    作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...

  5. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  6. Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结

    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...

  7. 17Java进阶——反射、进程、Java11新特性

    1.Java反射机制 Java反射(Reflection)概念:在运行时动态获取类的信息以及动态调用对象方法的功能. 1.1反射的应用--通过全类名获取类对象及其方法 package two.refl ...

  8. Java 9和Java 10的新特性

    http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...

  9. JDK 15 JAVA 15的新特性展望

    目录 JEP 371: Hidden Classes JEP 372: 删除 Nashorn JavaScript Engine JEP 377: 新的垃圾回收器ZGC正式上线了 JEP 378: T ...

随机推荐

  1. Springboot — 用更优雅的方式发HTTP请求:RestTemplate

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率. 我之前的HTTP开发是用ap ...

  2. 恋爱话术库撩妹至尊VIP版

    本软件来自互联网,解锁永久至尊VIP 是一款教你撩妹密语软件.和女生聊天没有话题? 不知道怎么逗乐女生? 女生生气了不会哄? 不知道怎么让女生愿意跟你聊下去? 不知道女生对你有没有意思? 遇到不知道怎 ...

  3. easyui form提交时验证必填,打开时不显示必填提示

    给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...

  4. SpringBoot集成Swagger2并配置多个包路径扫描

    1. 简介   随着现在主流的前后端分离模式开发越来越成熟,接口文档的编写和规范是一件非常重要的事.简单的项目来说,对应的controller在一个包路径下,因此在Swagger配置参数时只需要配置一 ...

  5. maven下载和配置

    maven就是管理架包(jar)的一个工具类,是一个绝佳的构建工具 但是maven是需要下载和配置环境的,和jdk差不多 1.首先进入apache的官网 http://maven.apache.org ...

  6. securecrt7.1注册方法

    本文出自 "Kinslayer 's Blog" 博客,请务必保留此出处http://kinslayer.blog.51cto.com/3681810/833438

  7. 浅谈强连通分量(Tarjan)

    强连通分量\(\rm (Tarjan)\)             --作者:BiuBiu_Miku \(1.\)一些术语   · 无向图:指的是一张图里面所有的边都是双向的,好比两个人打电话 \(U ...

  8. k8s ansible部署部署文档

    一:基础系统准备 ubuntu 1804----> root密码:123456 主要操作:   1.更改网卡名称为eth0: # vim /etc/default/grub GRUB_CMDLI ...

  9. python pip命令的安装与实验安装scrapy

    大家在使用python时候,很多时候导入模块都会发现该模块不存在,那么我们就需要下载安装,可是有时候安装会出现各种问题,大家回去请教别人,大部分程序员会回答你:pip install 什么等,可是你p ...

  10. windows 任何软件出现异常有日志 w3wp.exe [10608]中发生了未处理的Microsoft .Net Framework异常

    右键我的电脑 管理