zoukankan      html  css  js  c++  java
  • 【Java基础】Java11 新特性

    Java11 新特性

    新增字符串处理方法

    新增方法:

    • 判断字符串是否为空白 " ".isBlank(); // true
    • 去除首尾空白 " Javastack ".strip(); // "Javastack"
    • 去除尾部空格 " Javastack ".stripTrailing(); // " Javastack"
    • 去除首部空格 " Javastack ".stripLeading(); // "Javastack "
    • 复制字符串 "Java".repeat(3);// "JavaJavaJava"
    • 行数统计 "A B C".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 位系统;

    总结和练习

  • 相关阅读:
    eclipse两种注释的快捷键
    为什么我的安卓虚拟机没有虚拟键盘
    windows server2012部署apache项目访问后台管理系统时tomcat就停了是怎么回事
    什么时候你可以考虑离职?遇到这6种情况
    安装wampserver后,在www文件夹下面写php文件,而在网页里输入localhost而无法打开php文件时解决办法汇总
    访问localhost文件下的testmysql.php文件报Not Found
    访问localhost的phpmyadmin出现访问被拒绝
    wamp如何设置数据库的密码
    WAMP不能启动, 一直处于红色图标或者橙色图标的解决办法
    [AngularJS] Decorator a directive
  • 原文地址:https://www.cnblogs.com/parzulpan/p/14131767.html
Copyright © 2011-2022 走看看