目录

JDK版本总览

1、JDK1.1(1997)

2、JDK 1.2(1998)

3、JDK 1.3(2000)

4、JDK 1.4(2002)

5、JDK 1.5 (2004)

6、JDK1.6(2006)

7、JDK 1.7(2011)

8、JDK 1.8 (2014)

9、JDK 1.9(2017)

10、JDK 10(2018)

11、JDK 11(2018.9)

12、JDK 12(2019)

13、JDK 13(2019.9)

14、JDK 14 (2020.3)

15、JDK 15(2020.9)

16、JDK 16 (2021.3)

17、JDK 17 (2021.9)


JDK版本总览

jdk版本
序号版本时间
1JDK 1.11997
2JDK 1.21998
3JDK 1.32000
4JDK 1.42002
5JDK 5.02004
6JDK 62006
7JDK 72011
8JDK 82014
9JDK 92017
10JDK 102018
11JDK 112018
12JDK 122019
13JDK 132019

14

JDK 142020
15JDK 152020
16JDK 162021
17JDK 172021

1、JDK1.1(1997)

JDK 1.1(Java Development Kit 1.1)是Java平台的第一个正式版本,于1997年发布。虽然它是Java的初始版本之一,但相对于后续版本,它引入的新特性相对较少。以下是JDK 1.1版本的一些新功能和改进:

  1. AWT(Abstract Window Toolkit):JDK 1.1引入了AWT,这是Java的图形用户界面(GUI)库。AWT提供了创建窗口、按钮、文本框等GUI组件的功能,使Java应用程序能够具有图形界面。
  2. 内部类(Inner Classes): JDK 1.1引入了内部类,它允许在一个类的内部定义另一个类。内部类具有访问外部类成员的特权,可以更轻松地实现封装和组件化。
  3. JAR文件格式: JDK 1.1引入了JAR文件格式(Java Archive),用于将多个Java类文件和相关资源打包成一个可执行的JAR文件。JAR文件可以方便地分发和部署Java应用程序。
  4. 反射(Reflection): JDK 1.1引入了反射机制,允许程序在运行时获取类的信息、调用方法和访问字段。这为一些高级特性和工具(如JavaBeans)的实现提供了基础。
  5. 垃圾回收(Garbage Collection): JDK 1.1引入了更高效的垃圾回收算法,以提高Java程序的性能和内存管理。

  6. JDBC(Java Database Connectivity): JDK 1.1引入了JDBC,这是用于Java与数据库通信的API。JDBC允许Java应用程序连接到不同类型的数据库并执行SQL查询。

  7. RMI(Remote Method Invocation): JDK 1.1引入了RMI,这是一种用于远程调用Java对象方法的机制。它允许分布式系统中的Java对象相互通信。

2、JDK 1.2(1998)

JDK 1.2(Java Development Kit 1.2),也被称为Java 2,于1998年发布,引入了许多重要的新功能和改进,使Java编程语言更加强大和功能丰富。以下是JDK 1.2版本的一些主要新功能:

  1. Swing GUI库: JDK 1.2引入了Swing,这是一个新的Java图形用户界面(GUI)库。Swing提供了轻量级的组件,比AWT更具表现力和可定制性。它引入了窗体、按钮、标签、表格等新组件,为Java应用程序提供了更现代的外观和感觉。

  2. 集合框架(Collections Framework): JDK 1.2引入了集合框架,它提供了一组用于操作和管理数据集合的类和接口。这包括List、Set、Map等数据结构,使数据操作更加方便和高效。

  3. JDBC 2.0: Java Database Connectivity(JDBC) 2.0在JDK 1.2中引入了更多的功能,包括批处理操作、连接池、可滚动结果集等。

  4. 内部ization(国际化): JDK 1.2引入了对国际化的更好支持。它引入了新的国际化和本地化API,以便开发者能够轻松地创建多语言和多区域的应用程序。

  5. 反射的增强: 反射机制在JDK 1.2中得到增强,允许开发者更容易地获取和操作类的信息,包括方法、字段、注解等。

  6. 强制类型转换(Casting): JDK 1.2引入了强制类型转换,允许开发者将一个对象强制转换为另一种类型,以便进行更灵活的编程。

  7. Java Naming and Directory Interface(JNDI): JDK 1.2引入了JNDI,用于在分布式环境中查找和访问命名和目录服务,如LDAP(轻量级目录访问协议)。

  8. 反向布局管理器(LayoutManager): JDK 1.2引入了更多的布局管理器,使开发者能够更灵活地管理Swing GUI组件的布局。

  9. 改进的事件处理: JDK 1.2引入了更多的事件处理功能,包括内部事件监听器、事件适配器等。

  10. Java 2D API: JDK 1.2引入了Java 2D API,允许开发者创建2D图形和图像处理应用程序。

  11. Jar文件的Pack200压缩: JDK 1.2引入了Pack200工具,用于对Jar文件进行更高效的压缩,以减小应用程序的下载尺寸。

JDK 1.2的引入使Java平台更加强大,适用于更广泛的应用领域,包括图形应用、企业级应用、数据库应用等。它标志着Java的发展进程,为后续版本的Java提供了坚实的基础。

3、JDK 1.3(2000)

JDK 1.3(Java Development Kit 1.3)于2000年发布,引入了许多新功能和改进,以进一步增强Java编程语言和平台的功能和性能。以下是JDK 1.3版本的一些主要新功能和改进:

  1. HotSpot虚拟机: JDK 1.3引入了HotSpot虚拟机,这是一种高性能的Java虚拟机,用于改进Java应用程序的执行速度和内存管理。HotSpot虚拟机在后续版本中得到了进一步的优化和改进。

  2. Java Naming and Directory Interface(JNDI)的增强: JDK 1.3扩展了JNDI,引入了更多的功能,使Java应用程序能够更容易地与命名和目录服务进行交互。

  3. Java Platform Debugger Architecture(JPDA): JDK 1.3引入了JPDA,它是一种用于Java调试的架构。JPDA允许开发者使用调试器检查和调试Java应用程序的运行时状态。

  4. Java Sound API: JDK 1.3引入了Java Sound API,允许开发者在Java应用程序中进行音频处理和播放

  5. Java Naming and Directory Interface for the Service Provider Interface(JNDI SPI): JDK 1.3引入了JNDI SPI,这是一种扩展JNDI的机制,允许开发者创建自定义的JNDI提供程序以访问各种命名和目录服务。

  6. Java Secure Socket Extension (JSSE): JDK 1.3引入了JSSE,用于提供加密和安全套接字通信的API。它允许Java应用程序进行加密通信,确保数据的安全性和隐私性。

  7. Java Authentication and Authorization Service (JAAS): JDK 1.3引入了JAAS,用于身份验证和授权的API。它允许开发者实现安全的用户身份验证和访问控制。

  8. RMI-IIOP: JDK 1.3引入了RMI-IIOP,这是RMI(Remote Method Invocation)的扩展,支持使用CORBA(Common Object Request Broker Architecture)进行分布式通信。

  9. Java Platform Debugger Architecture (JPDA): JDK 1.3引入了JPDA,提供了一种用于Java程序调试的框架,包括Java虚拟机工具接口(JVMTI)和Java虚拟机调试接口(JVMDI)。

  10. 其他改进: JDK 1.3还包括许多其他改进,如性能优化、Bug修复、新的工具和API等,以提高Java平台的稳定性和可用性。

JDK 1.3的引入进一步扩展了Java平台的功能,增加了更多用于开发企业级和分布式应用程序的工具和API。这些改进使Java成为一种更强大、更灵活和更可靠的编程语言和平台。

4、JDK 1.4(2002)

JDK 1.4(Java Development Kit 1.4),也被称为Java 2 Platform, Standard Edition 1.4,于2002年发布,引入了许多新功能和改进,以进一步增强Java编程语言和平台的功能和性能。以下是JDK 1.4版本的一些主要新功能和改进:

  1. 正则表达式(Regular Expressions): JDK 1.4引入了正则表达式支持,通过java.util.regex包提供了强大的正则表达式功能,用于文本处理和模式匹配。

  2. 集合框架的增强: JDK 1.4扩展了集合框架,引入了新的集合类,如LinkedHashMapLinkedHashSet,以及Collections类中的新方法,如Collections.sort

  3. 异常链(Exception Chaining): JDK 1.4引入了异常链,允许在一个异常中包含其他异常信息,以帮助调试和错误处理。

  4. 断言(Assertions): JDK 1.4引入了断言机制,允许开发者在代码中插入断言语句,以检查程序的预期状态,并在断言失败时引发AssertionError异常。

  5. NIO(New I/O): JDK 1.4引入了NIO,这是一种新的I/O(输入/输出)机制,提供了更灵活、更高效的文件和网络I/O操作。

  6. XML解析: JDK 1.4引入了内置的XML解析器,如javax.xml.parsers包,以便于处理和分析XML文档。

  7. 日志(Logging): JDK 1.4引入了java.util.logging包,用于实现基本的日志记录功能,允许开发者记录应用程序的运行时信息。

  8. 强制类型转换(Casting)的改进: JDK 1.4引入了泛型以及相关的强制类型转换,允许更安全和类型安全的编程。

  9. Java Web Start: JDK 1.4引入了Java Web Start,这是一种用于启动和部署Java应用程序的机制,允许从Web浏览器中启动应用程序。

  10. 安全性改进: JDK 1.4引入了许多安全性改进,包括改进的安全管理器和权限模型,以增强Java应用程序的安全性。

  11. JDBC 3.0: Java Database Connectivity(JDBC) 3.0在JDK 1.4中引入了新特性,如可滚动结果集、批处理操作等。

  12. 改进的性能: JDK 1.4包括许多性能优化,包括垃圾回收和JIT(Just-In-Time)编译器的改进,以提高Java应用程序的性能

  13. 其他改进: JDK 1.4还包括许多其他改进,如增加的API、新的工具、Bug修复等,以提高Java平台的稳定性和可用性。

JDK 1.4的引入进一步增强了Java平台的功能,使其更适用于各种应用程序和领域,包括企业级应用、Web应用、桌面应用和嵌入式系统。这些新功能和改进为Java开发人员提供了更多工具和功能,以简化开发和提高性能。

5、JDK 1.5 (2004)

JDK 1.5,也称为Java 5或Java 1.5,于2004年发布,引入了许多重要的新功能和语言增强,使Java编程语言更加强大、表达力更丰富。以下是JDK 1.5版本的一些主要新功能和改进:

  1. 泛型(Generics): 泛型引入了类型参数,允许开发者编写更通用、类型安全的代码。它允许在集合、类和方法中使用类型参数,提高了代码的可读性和安全性。
    List names = new ArrayList();names.add("Alice");names.add("Bob");
  2. 增强的for循环: JDK 1.5引入了增强的for循环,也称为foreach循环,用于遍历集合和数组。
    for (String name : names) {System.out.println(name);}
  3. 自动装箱和拆箱(Autoboxing and Unboxing): JDK 1.5引入了自动装箱和拆箱,允许原始数据类型和其对应的包装类之间的隐式转换。
    Integer i = 42; // 自动装箱int j = i;// 自动拆箱
  4. 枚举(Enums): JDK 1.5引入了枚举类型,允许开发者创建具有固定常量值的枚举类型。
    enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}
  5. 静态导入(Static Import): 静态导入允许开发者在代码中直接使用静态成员,而不需要使用类名限定符。
    import static java.lang.Math.*;double result = sqrt(25.0);
  6. 可变参数(Varargs): JDK 1.5引入了可变参数,允许方法接受不定数量的参数,简化了方法的定义和调用。
    public void printNumbers(int... numbers) {for (int num : numbers) {System.out.println(num);}}
  7. 注解(Annotations): 注解允许开发者在代码中添加元数据信息,用于编译时和运行时处理。Java 5引入了自定义注解和元注解(用于注解其他注解)。
    @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface MyAnnotation {String value();}
  8. 枚举集合(EnumSet和EnumMap): JDK 1.5引入了EnumSet和EnumMap,这些集合类专门用于处理枚举类型

  9. 格式化字符串(Formatted Strings): 引入了printfformat方法,以及String.format,用于更灵活地格式化字符串。

    System.out.printf("Hello, %s! You are %d years old.%n", name, age);
  10. 并发工具(Concurrent Utilities): JDK 1.5引入了java.util.concurrent包,提供了并发编程的工具,如锁、线程池、并发集合等。

这些新功能和语言增强使Java编程更加简单、安全和高效。它们为Java开发者提供了更多工具和技术,以应对各种应用程序的需求,从简单的脚本到大规模的企业级应用。

6、JDK1.6(2006)

JDK 1.6(也称为Java 6或Java SE 6)于2006年发布,引入了许多新功能、改进和性能优化。以下是JDK 1.6版本的一些主要新功能和改进:

  1. 脚本引擎(Scripting Engine): JDK 1.6引入了Java Compiler API和相关的脚本引擎API,允许在Java应用程序中嵌入和执行脚本语言,如JavaScript、Groovy和其他脚本语言。

  2. Pluggable Annotations(可插拔注解): JDK 1.6引入了可插拔注解处理器API,允许开发者创建自定义的注解处理器,用于生成代码、验证代码或执行其他与注解相关的任务。

  3. 桌面应用增强: JDK 1.6引入了许多改进,包括支持系统托盘、改进的AWT和Swing组件、更好的平台集成等,使得开发桌面应用程序更容易。

  4. 性能优化: JDK 1.6包括了对Java虚拟机(JVM)的性能优化,包括改进的JIT编译器、垃圾回收器的改进等,以提高Java应用程序的性能和响应速度。

  5. Web服务增强: JDK 1.6引入了JAX-WS(Java API for XML Web Services)2.0,用于开发和部署Web服务应用程序。

  6. JDBC 4.0: Java Database Connectivity(JDBC)4.0在JDK 1.6中引入,包括自动加载数据库驱动程序、更简单的连接管理、更多的SQL类型支持等。

  7. XML支持: JDK 1.6增强了XML处理功能,包括内置的XML解析器、改进的XPath和XSLT支持等。

  8. JConsole监视工具: JDK 1.6引入了JConsole,这是一个监视和管理Java应用程序的工具,允许开发者监控堆内存、线程、性能等方面的信息

  9. 改进的垃圾回收: JDK 1.6包括了改进的垃圾回收算法,如G1(Garbage-First)垃圾回收器,以提高内存管理的效率和性能。

  10. Java Compiler API: JDK 1.6引入了Java Compiler API,允许开发者在运行时动态编译Java源代码,并将其加载到JVM中执行。

这些新功能和改进使Java 6成为一个更强大、更高效、更易于开发和维护的平台。它为Java开发人员提供了更多的工具和技术,以满足不断变化的应用程序需求。此外,JDK 1.6是一个LTS(长期支持)版本,提供了更长时间的支持和维护。

7、JDK 1.7(2011)

JDK 1.7(也称为Java 7或Java SE 7)于2011年发布,引入了许多新功能、改进和性能优化。以下是JDK 1.7版本的一些主要新功能和改进:

  1. 语言增强(Language Enhancements):

    一、钻石操作符(Diamond Operator): 允许在泛型类的实例化时省略泛型类型,使代码更简洁。

    二、字符串类型的switch语句: 允许在switch语句中使用字符串。

    三、自动关闭资源(Automatic Resource Management): 引入了try-with-resources语句,用于自动关闭资源,如文件、网络连接等。

    四、多异常捕获(Multiple Exception Handling): 允许在一个catch块中捕获多个异常类型。

  2. NIO 2.0(New I/O): 引入了NIO 2.0,增加了对文件系统操作的支持,包括文件复制、移动、删除等。
  3. Fork/Join框架: 引入了Fork/Join框架,用于并行处理任务,特别适用于多核处理器。

  4. 动态语言支持(Dynamic Language Support): 引入了InvokeDynamic指令,用于支持动态语言的运行时优化。

  5. 新的垃圾回收器(Garbage Collectors): 引入了G1(Garbage-First)垃圾回收器,以提供更好的垃圾回收性能和可预测性。

  6. Concurrent Collections: 引入了并发集合,如ConcurrentHashMap,用于支持多线程并发访问。

  7. 对注解的增强(Annotations Enhancements): 允许注解用于更多的程序元素,如局部变量、构造方法、方法的异常声明等。

  8. 新的I/O和NIO类: 引入了新的I/O和NIO类,如文件系统操作类(Files类)、异步通道类(AsynchronousChannel)、套接字选项类等。

  9. 改进的并发工具: 引入了新的并发工具,如CountDownLatch、Phaser、Exchanger等,以简化多线程编程。

  10. 支持新的硬件体系结构: JDK 1.7增加了对新的硬件体系结构的支持,包括新的指令集扩展和硬件加速。

  11. 改进的网络库: JDK 1.7引入了NIO 2.0的改进,支持了非阻塞I/O、新的网络协议等。

  12. Java虚拟机(JVM)性能优化: JDK 1.7包括了对JVM性能的多项改进,以提高应用程序的性能和响应速度。

  13. 升级的JDBC: 引入了JDBC 4.1,包括更多的自动化特性和改进。

  14. 改进的安全性: JDK 1.7增强了Java的安全性,包括新的加密算法和安全性增强。

这些新功能和改进使Java 7成为一个更强大、更高效、更易于开发和维护的平台。它为Java开发人员提供了更多工具和技术,以满足不断变化的应用程序需求,并提供更好的性能和安全性。

8、JDK 1.8 (2014)

JDK 1.8(也称为Java 8)于2014年发布,引入了许多重要的新功能、改进和语言增强,这些改进使Java编程语言更加现代化、强大和高效。以下是JDK 1.8版本的一些主要新功能和改进:

  1. Lambda表达式(Lambda Expressions): 引入了Lambda表达式,允许开发者以更紧凑和清晰的方式编写匿名函数,从而更容易实现函数式编程。
    List names = Arrays.asList("Alice", "Bob", "Charlie");names.forEach(name -> System.out.println(name));
  2. 函数式接口(Functional Interfaces): JDK 1.8引入了函数式接口,它是一个只有一个抽象方法的接口,用于支持Lambda表达式的使用。
    @FunctionalInterfaceinterface MyFunction {int apply(int a, int b);}
  3. Stream API: 引入了Stream API,用于处理集合数据的功能性编程方式。Stream允许进行过滤、映射、归约等操作。
    List numbers = Arrays.asList(1, 2, 3, 4, 5);int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(Integer::intValue).sum();
  4. 默认方法(Default Methods): 允许在接口中添加具有默认实现的方法,以便在不破坏现有实现的情况下扩展接口。
    interface MyInterface {void myMethod();default void myDefaultMethod() {// 默认实现}}
  5. 方法引用(Method References): 允许使用已存在的方法作为Lambda表达式的参数,以简化代码。
    List names = Arrays.asList("Alice", "Bob", "Charlie");names.forEach(System.out::println);
  6. 新的日期和时间API(Date and Time API): 引入了java.time包,提供了更好的日期和时间处理功能,包括不可变的日期时间对象、时区支持等。
    LocalDate today = LocalDate.now();
  7. 新的JavaScript引擎: 引入了Nashorn JavaScript引擎,用于在Java应用程序中执行JavaScript代码。
  8. 改进的注解(Annotations): 引入了重复注解和类型注解,以增强注解的灵活性。

  9. 新的并发工具: 引入了CompletableFuture类,用于更轻松地进行异步编程和并行处理。

  10. 改进的垃圾回收: 引入了G1垃圾回收器的改进,以提高垃圾回收性能。

  11. 改进的类型推断: 引入了目标类型推断,使编译器更好地理解Lambda表达式的目标类型。

  12. 其他改进: 包括新的函数式接口、改进的接口默认方法支持、新的方法和类、新的IO/NIO2功能、安全性增强等。

JDK 1.8的引入使Java编程语言更加现代化,提供了更多的工具和语言特性,以支持函数式编程和更简洁的代码编写,同时保持了Java的稳定性和可靠性。这些新功能使Java 8成为一个更强大、更适合现代开发需求的平台。

9、JDK 1.9(2017)

JDK 1.9(也称为Java 9)于2017年发布,引入了一些重要的新功能、改进和语言增强,同时也带来了模块化系统的重大变化。以下是JDK 1.9版本的一些主要新功能和改进:

  1. 模块系统(Module System): JDK 9引入了模块系统,将代码组织为模块,以便更好地管理和解决依赖关系。这有助于减少类路径问题、提高代码的可维护性和可扩展性。

  2. 模块化标准库(Modularized Standard Library): JDK 9将Java标准库划分为模块,使开发者能够更精确地选择需要的模块,减少了应用程序的依赖。

  3. 接口私有方法(Private Methods in Interfaces): 允许在接口中定义私有方法,用于实现接口中的公共方法,提高了接口的可维护性和代码复用性。

    interface MyInterface {default void myDefaultMethod() {// 公共方法privateMethod();}private void privateMethod() {// 私有方法}}
  4. 改进的钻石操作符(Diamond Operator): 允许在匿名类中使用钻石操作符。

    List names = new ArrayList();
  5. 改进的try-with-resources语句: 允许在try-with-resources语句中使用已声明的资源。

    Resource resource1 = new Resource();Resource resource2 = new Resource();try (resource1; resource2) {// 使用资源}
  6. 改进的@SafeVarargs注解: 允许在私有静态方法中使用@SafeVarargs注解。

  7. 改进的性能和垃圾回收器(Performance and Garbage Collectors): JDK 9包括对性能的改进和G1垃圾回收器的优化。

  8. HTTP 2客户端(HTTP 2 Client): 引入了新的HTTP 2客户端API,允许开发者更高效地处理HTTP请求和响应。

  9. 集合工厂方法(Collection Factory Methods): 引入了一些新的工厂方法,用于创建不可变集合对象,如List.of()Set.of()

    List names = List.of("Alice", "Bob", "Charlie");
  10. 新的命令行工具(Command Line Tools): 引入了一组新的命令行工具,用于源代码分析、模块管理、javadoc生成等。

  11. 改进的javadoc工具: 引入了新的HTML5支持、搜索功能和其他改进,提高了文档生成工具的功能。

  12. 改进的javac编译器: 引入了一些编译器改进,以提高代码的性能和稳定性。

这些新功能和改进使JDK 9成为一个更现代化、更强大的Java平台,同时引入了模块化系统,以提高代码的可维护性和依赖管理。需要注意的是,模块系统的引入可能需要开发者进行一些调整,以适应新的模块化编程方式。

10、JDK 10(2018)

JDK 10(也称为Java 10)于2018年发布,虽然相对于之前的版本,它引入的新功能和改进相对较小,但仍然包含了一些有趣的特性。以下是JDK 10版本的一些主要新功能和改进:

  1. 局部变量类型推断(Local Variable Type Inference): 引入了var关键字,允许在局部变量的声明中使用类型推断,减少了冗余的类型声明。
    var name = "Alice"; // 推断出String类型
  2. 改进的Optional类: 引入了一些新的方法,如orElseThrow(),以提高Optional类的实用性。
    Optional name = Optional.ofNullable(null);name.orElseThrow(() -> new IllegalArgumentException("Name not found"));
  3. 改进的CompletableFuture类: 引入了一些新的方法,如completeAsync()orTimeout(),以支持更灵活的异步编程。
    CompletableFuture future = CompletableFuture.supplyAsync(() -> 42);future.completeAsync(() -> 42, executor);
  4. javap命令的改进: 引入了-l-p选项,用于显示局部变量表和非公开的类成员。
    javap -l MyClassjavap -p MyClass
  5. 改进的垃圾回收器: JDK 10包括了一些垃圾回收器的改进,如G1垃圾回收器的性能优化。

  6. Application Class-Data Sharing(AppCDS): 允许将应用程序类元数据共享,以提高启动和执行应用程序的性能。

  7. Thread-Local Handshakes: 引入了一种轻量级的线程本地握手机制,以减少全局锁的竞争,提高多线程应用程序的性能。

这些新功能和改进虽然不如一些之前版本引入的内容显著,但它们仍然有助于提高Java的可读性、性能和开发体验。局部变量类型推断是一个有趣的特性,可以减少冗余的类型声明,使代码更简洁。此外,改进的垃圾回收器和异步编程工具也为开发人员提供了更多的工具,以优化应用程序的性能。

11、JDK 11(2018.9)

JDK 11于2018年9月发布,是一个LTS(Long-Term Support)版本,提供长期支持,以下是JDK 11版本的一些主要新功能和改进:

  1. HTTP Client(HTTP客户端): 引入了标准化的HTTP客户端API,支持HTTP/1.1和HTTP/2,并提供了异步和同步请求的支持。
    HttpClient httpClient = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://example.com")).GET().build();HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
  2. 局部变量语法改进: 引入了局部变量语法的改进,允许在var声明的同时初始化变量。
    var name = "Alice"; // 自动推断为String类型
  3. 新的垃圾回收器(Garbage Collector): 引入了Epsilon垃圾回收器,它是一种不执行垃圾回收操作的垃圾回收器,用于性能测试和特殊场景。

  4. 单元测试工具的改进: 引入了新的单元测试工具JEP 320,使单元测试更易于编写和运行。

  5. 动态类文件常量(Dynamic Class-File Constants): 引入了新的字节码指令,允许运行时访问类文件常量池中的常量。

  6. ZGC垃圾回收器稳定版本(Z Garbage Collector): ZGC垃圾回收器从实验性功能转变为稳定版本,用于大堆内存的垃圾回收。

  7. Flight Recorder(飞行记录器): 引入了Flight Recorder工具的开源版本,允许开发者在生产环境中收集性能数据。

  8. 新的命令行工具: 引入了一些新的命令行工具,如jhsdb(Java HotSpot Debugger)和jfr(Java Flight Recorder)。

  9. Elasticsearch连接器: 引入了用于连接Elasticsearch的新API,以便于Java应用程序访问Elasticsearch集群。

  10. 其他改进: JDK 11还包括了许多其他改进,如对安全性、性能、性能监控工具和库的改进。

这些新功能和改进使JDK 11成为一个更稳定、更强大、更安全的版本,特别是由于其LTS性质,使其成为长期支持的选择,适用于需要稳定性和可维护性的应用程序。

12、JDK 12(2019)

JDK 12于2019年发布,是一个短期支持版本(非LTS),相对于之前的LTS版本,它引入的新功能相对较少。以下是JDK 12版本的一些主要新功能和改进:

  1. Switch表达式(Switch Expressions): 引入了新的switch表达式,允许switch语句作为表达式使用,从而减少冗余代码。
    int day = 2;String dayType = switch (day) {case 1, 2, 3, 4, 5 -> "Weekday";case 6, 7 -> "Weekend";default -> "Invalid";};
  2. Compact Number Formatting(紧凑数字格式化): 引入了一种新的API,用于更紧凑地格式化数字,特别适用于国际化。
    NumberFormat cf = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);String formatted = cf.format(1000);
  3. 新的垃圾回收器(Garbage Collector): 引入了一种新的垃圾回收器,名为Shenandoah,旨在减小垃圾回收暂停时间。

  4. 微基准测试工具(Microbenchmarking): 引入了Microbenchmark Suite工具,用于进行微基准测试,帮助开发者优化性能。

  5. 引入预览特性: JDK 12引入了一些预览特性,如Switch表达式和紧凑数字格式化,这些特性处于试验性质,并可供开发者尝试。

  6. 其他改进: JDK 12还包括了一些性能改进、新的命令行工具、对废弃特性的移除和一些库的改进。

需要注意的是,由于JDK 12是一个短期支持版本,它的主要目标是试验和引入新特性,而不是提供长期支持。因此,一些新特性可能会在后续的LTS版本中稳定下来,而其他特性可能会被改进或移除。开发者应仔细考虑是否使用JDK 12,尤其是在生产环境中。

13、JDK 13(2019.9)

JDK 13于2019年9月发布,是一个非LTS(非长期支持)版本,它引入了一些新功能、改进和实验性特性。以下是JDK 13版本的一些主要新功能和改进:

  1. Switch表达式增强: 在JDK 12中引入的switch表达式在JDK 13中进一步增强,允许使用yield关键字来返回值。
    int result = switch (day) {case 1, 2, 3, 4, 5 -> {System.out.println("Weekday");yield 42;}case 6, 7 -> {System.out.println("Weekend");yield 0;}default -> throw new IllegalArgumentException("Invalid");};
  2. 新的字符串方法: 引入了一些新的字符串方法,如String::strip()String::stripLeading()String::stripTrailing(),用于去除字符串的空白字符。
    String text = " Hello, World! ";String stripped = text.strip();
  3. ZGC垃圾回收器的改进: ZGC垃圾回收器在JDK 13中进行了一些性能和功能方面的改进。

  4. 文本块(Text Blocks)标准化: 引入了文本块的标准化特性,允许在代码中更容易地编写多行文本。

    String html = """

    Hello, World!

    """;
  5. Unix域套接字(Unix Domain Socket)支持: 在Unix系统上引入了对Unix域套接字的支持,以便进行本地进程间通信。

  6. 新的命令行工具: 引入了一些新的命令行工具,如jshell(交互式Java Shell)的改进和新的jfr(Java Flight Recorder)工具。

  7. 对废弃特性的移除: JDK 13中移除了一些废弃的API和功能,以保持平台的简洁性和稳定性。

  8. 其他改进: JDK 13还包括了一些性能改进、JVM的改进和其他库的改进。

由于JDK 13是非LTS版本,它的目标是引入新的实验性特性和改进,而不是提供长期支持。因此,在生产环境中使用时需要谨慎考虑,并可能需要在后续LTS版本中迁移代码。开发者应根据其项目的需求和周期来决定是否采用JDK 13。

14、JDK 14 (2020.3)

JDK 14于2020年3月发布,它引入了一些新功能、改进和实验性特性。以下是JDK 14版本的一些主要新功能和改进:

  1. Switch表达式增强: 在JDK 12和13中引入的switch表达式在JDK 14中进一步增强,允许使用多个标签常量。
    int result = switch (day) {case 1, 2, 3, 4, 5 -> {System.out.println("Weekday");yield 42;}case 6, 7 -> {System.out.println("Weekend");yield 0;}default -> throw new IllegalArgumentException("Invalid");};
  2. Records(记录类): 引入了记录类,这是一种新的类类型,用于声明不可变的、自动实现equals()hashCode()toString()等方法的数据对象。
    record Point(int x, int y) { }
  3. Pattern Matching for instanceof 引入了模式匹配用于instanceof操作符,使代码更简洁。
    if (obj instanceof String s) {// 在此作用域中可以使用s}
  4. Text Blocks(文本块)改进: 改进了文本块的处理方式,允许在文本块中插入表达式。
    String formatted = """Hello, %s!Your balance is $%,.2f.""".formatted(name, balance);
  5. 垃圾回收器改进: JDK 14包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。

  6. 外部库支持改进: 引入了一些外部库的新版本,如OpenJFX 14,以提供更好的图形用户界面(GUI)支持。

  7. JFR事件流输出(JFR Event Streaming): 引入了JFR事件流输出功能,允许在运行时流式处理JFR事件数据。

  8. Foreign Function & Memory API(Incubator): 引入了外部函数和内存API的孵化版本,用于与本地代码和内存进行交互。

  9. 其他改进: JDK 14还包括了一些性能改进、对废弃特性的移除和一些库的改进。

需要注意的是,JDK 14中的一些功能可能处于实验性阶段(例如,Records和Pattern Matching for instanceof),这意味着它们可能在后续版本中进一步改进或正式成为Java的一部分。开发者可以根据项目需求和长期计划来考虑是否采用JDK 14。

15、JDK 15(2020.9)

JDK 15于2020年9月发布,它引入了一些新功能、改进和实验性特性。以下是JDK 15版本的一些主要新功能和改进:

  1. Sealed Classes(封闭类): 引入了封闭类,这是一种新的类类型,允许类明确指定允许继承的子类。
    sealed class Shape permits Circle, Rectangle, Triangle {// ...}
  2. Text Blocks(文本块)增强: 进一步增强了文本块的语法,以允许在文本块中包含反斜杠。
    String json = """{"name": "John","age": 30,"city": "New York"}""";
  3. 外部库改进: 引入了外部库的新版本,如OpenJFX 15,以提供更好的图形用户界面(GUI)支持。

  4. 垃圾回收器改进: JDK 15包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。

  5. Unix套接字通道(Unix Domain Socket Channel): 引入了对Unix套接字通道的支持,以便在Unix系统上进行本地进程间通信。

  6. Remove Applets(移除小程序): 移除了Applet API,这是一个已过时的浏览器插件技术。

  7. 其他改进: JDK 15还包括了一些性能改进、对废弃特性的移除和一些库的改进。

需要注意的是,JDK 15中的一些功能可能处于实验性阶段,而其他功能可能在未来版本中进一步改进或正式成为Java的一部分。开发者可以根据项目需求和长期计划来考虑是否采用JDK 15。此外,JDK 15是一个非LTS(非长期支持)版本,因此不会提供长期支持,开发者可能需要在后续LTS版本上迁移代码。

16、JDK 16 (2021.3)

JDK 16于2021年3月发布,它引入了一些新功能、改进和实验性特性。以下是JDK 16版本的一些主要新功能和改进:

  1. Unix域套接字通道API: 引入了对Unix域套接字(Unix Domain Socket)通道的正式API支持,以便进行本地进程间通信。

  2. 向量API(Incubator): 引入了向量API的孵化版本,允许开发者更容易地执行并行计算。

  3. 移除的功能: JDK 16中移除了一些已弃用的功能和模块,如RMI Activation系统和Applet API。

  4. Alpine Linux支持: 引入了对Alpine Linux的官方支持,使Java可以更好地在Docker容器中运行。

  5. 垃圾回收器改进: JDK 16包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。

  6. Pattern Matching for instanceof(Preview): 对模式匹配用于instanceof的支持进行了改进,包括在模式匹配中使用instanceof的情况。

  7. 记录类增强(Preview): 在记录类中引入了更多的功能,如嵌套的记录类和记录类的模式匹配。

  8. Foreign Function & Memory API(Incubator): 引入了外部函数和内存API的孵化版本的改进,以支持更多的底层交互操作。

  9. 其他改进: JDK 16还包括了一些性能改进、对废弃特性的移除和一些库的改进。

需要注意的是,一些功能处于孵化或预览阶段,这意味着它们可能在后续版本中进一步改进或正式成为Java的一部分。开发者可以根据项目需求和长期计划来考虑是否采用JDK 16。由于JDK 16不是LTS版本,因此它提供的支持周期相对较短,开发者可能需要在后续版本上迁移代码。

17、JDK 17 (2021.9)

JDK 17于2021年9月发布,是一个LTS(长期支持)版本,提供长期支持和维护。以下是JDK 17版本的一些主要新功能和改进:

  1. 垃圾回收器改进: JDK 17包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。

  2. Sealed Classes(封闭类)的进一步增强: 在JDK 17中,封闭类(Sealed Classes)可以扩展已知的子类,而不仅仅是声明的子类。

  3. 模式匹配的正式版本: 模式匹配在JDK 17中成为了正式版本,包括模式匹配用于instanceof和模式匹配switch表达式。

    if (obj instanceof String s) {// 在此作用域中可以使用s}int result = switch (day) {case 1, 2, 3, 4, 5 -> {System.out.println("Weekday");yield 42;}case 6, 7 -> {System.out.println("Weekend");yield 0;}default -> throw new IllegalArgumentException("Invalid");};
  4. 外部库和模块改进: JDK 17引入了一些外部库的新版本,同时对一些模块进行了改进。

  5. Alpine Linux支持改进: 进一步改进了在Alpine Linux上的支持,以提高在Docker容器中运行Java的性能和可用性。

  6. 移除的功能: JDK 17中移除了一些已弃用的功能和模块,如RMI Activation系统和Applet API。

  7. 其他改进: JDK 17还包括了一些性能改进、对废弃特性的移除和一些库的改进。

由于JDK 17是一个LTS版本,它提供了相对较长的支持和维护周期,适用于那些需要长期稳定性和可靠性的应用程序和项目。开发者可以根据项目需求和长期计划来考虑是否采用JDK 17,特别是对于企业和大型应用程序。