• Java9新增特性


    版本介绍

    Java 9 是Java编程语言开发的主要版本,其初始版本于2017年9月21日发布。这个版本的主要目标是实现在小型计算设备上的良好运行,并对JDK和Java Standard Edition平台进行模块化,以提高整体安全性,以及使JAVA SE和EE平台的Java代码库和大型应用程序的构建过程和维护变得容易。
    Java 9 发行版引入了模块系统,可以轻松应用于Platform和JDK,以及向Java平台添加了REPL(JShell)功能,这是一个可以读取、求值、打印和重复循环的交互式环境。此外,Java 9 也支持HTML5输出生成。

    特性列表

    • 模块化系统 :Java 9引入了模块化系统,将代码划分为模块,以更好地组织和管理代码。
    • 新的日期和时间API :Java 9引入了新的日期和时间API,使得处理日期和时间变得更简单、更强大。
    • HTTP/2支持 :Java 9引入了对HTTP/2的支持,可以更好地支持现代网络协议。
    • 改进的集合框架 :Java 9对集合框架进行了改进,增加了新的接口和实现类,使其更加灵活和易于使用。
    • 并发改进 :Java 9对并发进行了改进,增加了新的并发工具和API,以提高并发性能和开发效率。
    • 编译器优化 :Java 9对编译器进行了优化,采用了新的编译技术,以提高代码性能和执行效率。
    • JShell工具 :Java 9引入了JShell工具,允许在交互式环境中执行Java代码,方便开发者进行测试和调试。
    • JavaFX改进 :Java 9对JavaFX进行了改进,增加了新的API和功能,使其更加易用和强大。
    • 引入了新的Stream API :Java 9引入了新的Stream API,使得处理集合变得更加简单和直观。
    • 加强了对泛型的支持 :Java 9加强了对泛型的支持,引入了类型推断的语法糖,使得编写泛型代码更加容易。
    • 改进了枚举类型 :Java 9改进了枚举类型,使得枚举类型的实现更加简单和安全。
    • 引入了Optional类 :Java 9引入了Optional类,用来表示可能不存在的值,以避免NullPointerException。
    • 改进了集合的遍历 :Java 9改进了集合的遍历方式,引入了forEach方法和for-each循环,使得遍历集合变得更加简单和直观。
    • 引入了CompletableFuture类 :Java 9引入了CompletableFuture类,提供了一种简单的方式来处理异步编程和编写链式调用。
    • 支持Unicode 9 :Java 9支持Unicode 9,增加了对一些新字符的支持。
    • 删除了废弃的CORBA模块 :Java 9删除了废弃的CORBA模块,以减少不必要的代码和维护成本。
    • 支持JDK的动态版本 :Java 9支持在运行时切换JDK的版本,使得开发人员可以根据需要选择合适的JDK版本进行开发和部署。
    • 支持嵌套类和枚举类的静态成员 :Java 9支持嵌套类和枚举类的静态成员,使得代码更加清晰和易于维护。
    • 加强了对多线程的支持 :Java 9加强了对多线程的支持,引入了新的线程调度器和线程工厂,使得开发人员可以更加灵活地管理和控制线程。
    • 支持IPv6 :Java 9支持IPv6,增加了对IPv6地址的支持和处理能力。

    以上是Java 9的一些主要新增特性,这些特性使得Java语言在性能、易用性和可维护性方面都得到了进一步的提升。

    代码示例

    新的日期和时间api

    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    public class DateTimeExample {
        public static void main(String[] args) {
            LocalDateTime now = LocalDateTime.now();
            System.out.println("Current date and time: " + now);
            
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String formattedDateTime = now.format(formatter);
            System.out.println("Formatted date and time: " + formattedDateTime);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    JShell交互环境

    // 在JShell中输入这些代码示例
    | Welcome to JShell -- Version 9.0.1                                                                                                                                                                            |
    | For an introduction see `jshell --helpdocs`                                                                                                                                                                      |
    | Type `exit` to quit JShell -- Press F5 to run selected statement -- Press ESC to interrupt current statement evaluation                                                                                        |
    | /  System.out.println("Hello, World!"); // 输出 Hello, World!                                                                                                                                               |
    | /  int x = 5; // 定义一个整数变量x,并赋值为5                                                                                                                                                               |
    | /  System.out.println("x = " + x); // 输出 x 的值                                                                                                                                                           |
    | /  x += 3; // 将 x 的值增加3                                                                                                                                                                               |
    | /  System.out.println("x = " + x); // 输出 x 的值                                                                                                                                                           |
    | /exit; // 退出JShell交互式环境                                                                                                                                                                               |
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    模块化系统:

    
    module com.example.myapp {
        requires java.base;
        requires java.util;
        exports com.example.myapp;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    HTTP/2支持:

    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    public class HttpClientExample {
        public static void main(String[] args) {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(java.net.URI.create("https://example.com"))
                    .build();
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println(response.body());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Stream API:

    
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    public class StreamExample {
        public static void main(String[] args) {
            List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
            List<String> capitalizedNames = names.stream()
                    .map(name -> name.toUpperCase())
                    .collect(Collectors.toList());
            System.out.println(capitalizedNames);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    集合改进:

    
    import java.util.List;
    import java.util.ArrayList;
    import java.util.stream.Collectors;
    public class CollectExample {
        public static void main(String[] args) {
            List<String> names = new ArrayList<>();
            names.add("Alice");
            names.add("Bob");
            names.add("Charlie");
            List<String> capitalizedNames = names.stream()
                    .map(String::toUpperCase)
                    .collect(Collectors.toList());
            System.out.println(capitalizedNames);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    重复注释:

    
    // This is a comment
    // This is another comment // end of comment
    
    
    • 1
    • 2
    • 3
    • 4

    拓展

    http2协议特性

    二进制分帧 :HTTP/2采用二进制格式传输数据,而非文本格式,并且数据帧可以被切分成多个帧发送,这些帧可以根据头部流标识重新组装。

    单一长连接 :同一个域名使用一个TCP连接,这减少了创建多个TCP连接带来的网络开销和延迟,提高了吞吐量。

    多路复用 :在HTTP/2中,同一个连接上的请求可以并行执行,类似于多车道,而不是单车道。请求被二进制分帧,每个帧都有流编号。同一个请求和响应的帧必须是有序的,不同的请求的帧可以互相穿插,然后按照流编号重组。

    头部压缩 :HTTP/2使用HPACK压缩头部,使用首部表来进行首部字段存储。只有当首部表中的数据变更或为发送过时,才会发送http头部字段。客户端需要显式允许服务器启用推送功能。

    向下兼容HTTP/1 :HTTP/2在“语义”层不做改动,与HTTP完全一致,例如请求方法、URI、状态码、头字段等概念保留不变。特别要说的是,与HTTPS不同,HTTP/2没有在URI里引入新的协议名,仍然用“http”表示明文协议,用“https”表示加密协议。

    总的来说,HTTP/2协议的这些特性有助于提高网络性能和效率。

    其它拓展

    Java10新增特性

    Java11新增特性

    ConcurrentLinkedDeque详解-Deque接口链表实现方案

    查看docker容器中java进程堆栈信息

    Redis常用数据结构底层实现与验证-String

    Java9

  • 相关阅读:
    JS轮播图实现
    开发、部署系统环境 - docker 各常用镜像的使用
    Linux:zip包的压缩与解压
    audio console无法连接到RPC服务
    Python的10个编程技巧,你不一定都知道
    数据结构之“刷链表题”
    接口测试很难?3分钟带你入门接口自动化测试
    HTTPS详解
    哈希函数3:布隆过滤器,用位图标记黑名单系统,用哈希函数设置位图
    10月20日,每日信息差
  • 原文地址:https://blog.csdn.net/zhangzehai2234/article/details/134323401