Java8到Java19的一些变化分析详解

目录
  • 前言
  • Java 8
  • Java 9
  • Java 10
  • Java 11
  • Java 12
  • Java 13
  • Java 14
  • Java 15
  • Java 16
  • Java 17
  • Java 18
  • Java 19
  • 总结

前言

Java 是一种流行的编程语言,在其整个历史中经历了许多变化和更新。在本文中,我们将了解从 Java 8 开始的每个 Java 版本中引入的一些关键特性。

Java 8

  • Lambda 表达式:Java 8 引入了一个称为 lambda 表达式的新功能,它允许在 Java 中进行函数式编程。此功能使开发人员能够使用匿名函数并将它们作为参数传递给方法。
  • Stream API:Java 8 还引入了 Stream API,它允许开发人员以函数式的方式对数据集合执行操作。Stream API 允许以并行且高效的方式对大型数据集执行过滤、映射和归约等操作。
  • 日期和时间 API:Java 8 还引入了一个新的日期和时间 API,它提供了一种更健壮和可读的方式来处理 Java 中的日期和时间操作。
  • 接口中的默认方法和静态方法:Java 8 允许接口具有默认方法和静态方法。它允许在不破坏现有实现的情况下将新功能添加到现有接口。

Java 9

  • 模块化系统:Java 9 引入了 Java 平台模块系统 (JPMS),它允许 Java 开发人员将 JDK 划分为一组可以单独管理的模块。
  • JShell:Java 9 引入了 JShell,这是一个交互式命令行工具,允许开发人员快速测试和运行 Java 代码片段。
  • 改进Prcoess API:Java 9 引入了改进了Process API,使开发人员可以更轻松地处理和管理操作系统进程。
  • 改进的 HTTP/2 客户端:Java 9 引入了改进的 HTTP/2 客户端,它比以前的 HTTP 客户端更快、更高效。

Java 10

  • 局部变量类型推断var:Java 10 引入了局部变量类型推断,它允许开发人员使用“var”关键字而不是指定局部变量的类型。
var a = 20;你
  • 额外的 Unicode 语言标签扩展:Java 10 向现有的 Locale 类添加了额外的 Unicode 语言标签扩展。
  • 垃圾收集器接口:Java 10 引入了垃圾收集器接口,它允许开发人员通过 Java 虚拟机 (JVM) 创建和使用自定义垃圾收集器。
  • 额外的根证书:Java 10 包含额外的根证书,以提高基于 Java 的应用程序的安全性。

Java 11

  • Lambda 参数的局部变量语法:Java 11 引入了一种新的 lambda 参数语法,允许开发人员将 var 关键字用于 lambda 参数,类似于它用于局部变量的方式。
  • HttpClient API:Java 11 引入了一个新的 HttpClient API,允许开发人员更轻松、更高效地处理 HTTP 请求和响应。
  • String 和 Lining API 改进:Java 11 在 String 类中引入了几个新方法,例如 strip() repeat(),在 Lining 类中引入了一些新方法,例如 lines()isBlank()

Java 12

  • Switch 表达式:Java 12 引入了 switch 表达式,它允许开发人员将 switch 语句用作表达式,而不仅仅是语句。
String s = switch (score){
            case 'A' -> "优秀";
            case 'B' -> "良好";
            case 'C' -> "中";
            case 'D' -> "及格";
            case 'F' -> "不及格";
            default -> "成绩输入错误";
        };
  • 文本块:Java 12 引入了文本块,它允许开发人员以更易读和更方便的方式编写多行字符串文字。
System.out.println("""
    Hello,
    multiline
    text blocks!
    """);
String json = """
    {
        greeting: "hello",
        audience: "text blocks",
        punctuation: "!"
    }
    """;
  • 提高 JVM Constants API 的性能:Java 12 改进了 JVM Constants API 的性能,这使开发人员可以更有效地访问类文件常量。
  • Shenandoah垃圾收集器:一种低停顿时间的垃圾收集器,Java 12 引入了 Shenandoah,这是一种新的垃圾收集器,它承诺比其他现有的垃圾收集器具有更短的停顿时间。

Java 13

  • 文本块(预览功能) :Java 13 改进了 Java 12 中引入的文本块功能,使其更稳定、更易于使用。
  • Switch 表达式(预览功能) :Java 13 还改进了 Java 12 中引入的switch表达式功能,使其更具表现力和功能。
  • 旧版 Socket API 的重新实现:Java 13 重新实现了旧版 Socket API,它提供了一种更现代、更高效的 Java 套接字处理方式。
  • 新的字符串方法:Java 13 增加了几个新的字符串方法,例如 indent()transform(),允许开发人员以更方便的方式操作和格式化字符串。
  • 改进的错误处理:Java 13 改进了 JVM 中处理错误的方式,提供有关错误原因的更多详细信息,并使诊断和修复问题变得更加容易。

如您所见,Java 的每个版本都为该语言带来了新的特性和改进。Java 8 中添加的 Lambda 表达式和 Stream API 改变了开发人员编写代码和执行数据操作的方式。Java 9 中 JPMS 的引入和 Java 11 中 HttpClient API 的引入,提高了基于 Java 的应用程序的性能和安全性。Java 12 和 13 中的 Switch Expressions 和 Text Blocks 等预览功能提供了更具表现力和更强大的代码编写方式。

Java 14

  • instanceof 的模式匹配:Java 14 为 instanceof 运算符引入了模式匹配,它允许开发人员将对象与模式匹配并提取其组件,类似于在函数式编程语言中的实现方式。
if (obj instanceof String s) {
    // 如果类型匹配 直接使用
} else {
    // 如果类型不匹配则不能直接使用
}
  • Records:Java 14 引入了记录,它允许开发人员以更简洁和表达的方式声明类,类似于其他语言中的数据类。
// 直接这样定义类
record Point(int x, int y) { }
  • 有用的 NullPointerExceptions:Java 14 引入了一项新功能,它在 NullPointerExceptions 中提供了更多信息,从而更容易识别异常原因并修复问题。
  • Switch表达式(标准特性) :Java 14 将 Java 12 中引入的 Switch Expressions 特性作为标准特性,这意味着它现在是 Java 语言的永久组成部分。
  • 文本块(标准特性) :Java 14 也将 Java 12 中引入的文本块特性作为标准特性,这意味着它现在是 Java 语言的永久组成部分。

Java 15

  • 密封类:Java 15 引入了密封类,允许开发人员指定哪些类可以扩展特定类或实现特定接口。
  • 隐藏类:Java 15 引入了隐藏类,这些类不是公共 API 的一部分,只能由定义它们的类使用。
  • instanceof 的模式匹配(预览版) :Java 15 改进了 Java 14 中引入的 instanceof 特性的模式匹配,增加了对在单个语句中匹配多个模式的支持。
  • Foreign-Memory Access API:Java 15 引入了 Foreign-Memory Access API,它允许开发人员以安全高效的方式访问和操作 Java 堆之外的内存。

Java 16

  • Records (标准功能) :Java 16 将 Java 14 中引入的 Records 功能作为标准功能,这意味着它现在是 Java 语言的永久组成部分。
  • ****instanceof 的模式匹配(标准特性) :Java 16 将 Java 14 中引入的 instanceof 特性的模式匹配作为标准特性,这意味着它现在是 Java 语言的永久组成部分。
  • 打包工具:Java 16 引入了打包工具,它允许开发人员将他们的 Java 应用程序打包为不同平台(例如 Windows、Linux 和 macOS)的本机可执行文件。
  • Concurrent Thread-Stack Processing:Java 16 引入了一个新特性,允许 JVM 并发处理线程栈,从而提高了性能。

Java 17

  • Concise Method Bodies (预览功能) :Java 17 引入了“Concise Method Bodies”功能,它允许开发人员使用更简洁和可读性更高的语法来定义方法。
  • 改进的弃用警告:Java 17 改进了弃用警告功能,现在提供有关弃用元素以及如何替换它们的更详细信息。
  • Hidden Classes (标准特性) :Java 17 将 Java 15 中引入的 Hidden Classes 特性作为标准特性,这意味着它现在是 Java 语言的永久组成部分。
  • ****Foreign-Memory Access API (标准功能) :Java 17 将 Java 15 中引入的 Foreign-Memory Access API 功能作为标准功能,这意味着它现在是 Java 语言的永久组成部分。

Java 18

  • Records (预览功能) :Java 18 改进了 Java 14 中引入的Records功能,增加了对更复杂的记录类型的支持,并在记录的使用方式上提供了更大的灵活性。
  • Concise Method Bodies (标准特性) :Java 18 将 Java 17 中引入的 Concise Method Bodies 特性作为标准特性,这意味着它现在是 Java 语言的永久组成部分。
  • 改进的类型推断:Java 18 改进了类型推断功能,现在允许开发人员使用更复杂的类型并执行更高级的类型检查。
  • 改进的安全性:Java 18 通过引入增强的类文件验证和改进的访问控制等新功能,提高了基于 Java 的应用程序的安全性。

Java 19

  • Records (标准特性) :Java 19 将 Java 14 中引入的 Records 特性作为标准特性,这意味着它现在是 Java 语言的永久组成部分。
  • 改进的垃圾收集:Java 19 通过引入新的算法和策略来提高 JVM 的性能和效率,从而改进了垃圾收集功能。
  • 改进的错误处理:Java 19 通过提供有关错误的更多详细信息并使诊断和修复问题变得更加容易,改进了错误处理功能。
  • 改进的并发性:Java 19 通过引入新的类和方法改进了并发特性,使开发人员更容易编写多线程代码。
  • 改进的安全性:Java 19 通过引入增强的类文件验证和改进的访问控制等新功能,提高了基于 Java 的应用程序的安全性。

总结

上面罗列了Java8 到Java19新增的功能特性,但并不详尽,每个版本的 Java 中还引入了其他功能和改进。处列出的某些功能在某些版本中可能处于“预览”或实验状态,但该列表包括它们成为标准功能的时间。还值得注意的是,甲骨文宣布他们将每 6 个月发布一次新版本的 Java,因此该语言的更新将会更加频繁,更多关于Java8到Java19变化的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java8新特性 StreamAPI实例详解

    目录 Stream结果收集 结果收集到集合中 结果收集到数组中 对流中的数据做聚合计算 对流中数据做分组操作 对流中的数据做分区操作 对流中的数据做拼接 并行的Stream流 串行的Stream流 并行流 获取并行流 并行流操作 并行流和串行流对比 线程安全问题 Stream结果收集 面试官:说说你常用的StreamAPI. 结果收集到集合中 public static void main(String[] args){ // Stream<String> stream = Stream.of

  • Java8加java10等于Java18的版本查看及特性详解

    目录 前言 JEP 400 JEP 408 JEP 413 JEP 417 JEP 418 JEP 419 JEP 420 JEP 421 总结 前言 Java 18正式发布, 虽然它不是长期支持 (LTS) 版本,但它却实现了九个 JEP(在Java 18列出).有哪些特性值得关注呢? JEP 400 将 UTF-8 指定为标准 Java API 的默认字符集.通过此更改,依赖于默认字符集的 API 将在所有实现.操作系统.语言环境和配置中保持一致. JEP 408 Java内部终于有原生的W

  • Java8新特性Optional类及新时间日期API示例详解

    目录 Optional类 以前对null的处理 Optional类介绍 Optional的基本使用 Optional的常用方法 新时间日期API 旧版日期时间的问题 新日期时间API介绍 日期时间的常见操作 日期时间的修改和比较 格式化和解析操作 Instant类 计算日期时间差 时间校正器 日期时间的时区 JDK新的日期和时间API的优势 Optional类 面试官:Optional类了解过吗? 这个Optional类主要是解决空指针的问题. 以前对null的处理 @Test public v

  • Java9新特性Module模块化编程示例演绎

    目录 一.什么是Javamodule? 二.模块导出package 三.模块导入package 四.Javamodule的意义 五.实例 第一个模块 第二个模块 尝试使用未被exports的package代码 我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 写成一系列的文章,大概十篇左右,本文是第8篇. 在Java 9版本中Java 语言引入了一

  • Java9新特性中的模块化详解

    目录 模块化是什么? 那么,模块化怎么用呢? 为什么要用模块化 显式管理依赖: 强封装性: 安全性: 规范性: 自定义最小运行时映像: 孵化器模块的支持: Java9中的一个重大特性是增加了一种新型的程序设计组件 - 模块. 官方对模块的定义为:一个被命名的,代码和数据的自描述集合.( the module, which is a named, self-describing collection of code and data). 这个在Java7的时候就已经被提出,但由于其复杂性,不断跳票

  • Java8 List集合如何移除满足条件的元素

    目录 Java8 List集合移除满足条件的元素 移除List集合中特定的元素 1.移除List<String>中指定元素 2.移除List<对象>中指定元素 总结 Java8 List集合移除满足条件的元素 list.removeIf(filter ->{     return containerList.contains(filter); }); 功能:移除list中已经在containerList 容器中存在的元素. 移除List集合中特定的元素 两种情况 1.移除Li

  • Java11 中基于嵌套关系的访问控制优化问题

    目录 Java11 之前的实现方式 技术债务 Java11 中的实现 Nestmate 新增的 API getNestHost getNestMembers isNestmateOf 后续的改进 你好,我是看山. Java 语言很强大,但是,有人的地方就有江湖,有猿的地方就有 bug,Java 的核心代码并非十全十美.比如在 JDK 中居然也有反模式接口常量 中介绍的反模式实现,以及本文说到的这个技术债务:嵌套关系(NestMate)调用方式. 在 Java 语言中,类和接口可以相互嵌套,这种组

  • Tornado 多进程实现分析详解

    引子 Tornado 是一个网络异步的的web开发框架, 并且可以利用多进程进行提高效率, 下面是创建一个多进程 tornado 程序的例子. #!/usr/bin/env python # -*- coding:utf-8 -*- import os import time import tornado.web import tornado.httpserver import tornado.ioloop import tornado.netutil import tornado.proces

  • java面向对象设计原则之迪米特法则分析详解

    目录 概念 使用 拓展 概念 迪米特法则解决类与类之间耦合度问题,如果类A调用了B类的某一个方法,则这两个类就形成了一种紧耦合的方式,当B类这个方法发生变化时,一定会影响A类的执行结果.迪米特法则要求每一个类尽可能少的与其他类发生关系,也就是尽可能少的让其他类发生变化时,对其代码的执行结果产生的影响降到最低. 典型情况:A类调用B类的方法,B类和C类是一种关联关系,如果A类通过B类所持有的C类对象直接调用C类的方法,则A类和C类同时拥有强耦合的关系.代码如下: public class B {

  • jvm垃圾回收之GC调优工具分析详解

    进行GC性能调优时, 需要明确了解, 当前的GC行为对系统和用户有多大的影响.有多种监控GC的工具和方法, 本章将逐一介绍常用的工具. JVM 在程序执行的过程中, 提供了GC行为的原生数据.那么, 我们就可以利用这些原生数据来生成各种报告.原生数据(raw data) 包括: 各个内存池的当前使用情况, 各个内存池的总容量, 每次GC暂停的持续时间, GC暂停在各个阶段的持续时间. 可以通过这些数据算出各种指标, 例如: 程序的内存分配率, 提升率等等.本章主要介绍如何获取原生数据. 后续的章

  • YGC前后新生代是否变大分析详解

    问题描述 我们都知道gc是为了释放内存,但是你是否碰到过ygc前后新生代反增不减的情况呢?gc日志效果类似下面的: 2016-05-18T15:06:13.011+0800: [GC [ParNew (promotion failed): 636088K->690555K(707840K), 0.2958900 secs][CMS: 1019739K->1019733K(1310720K), 2.6208600 secs] 1655820K->1655820K(2018560K), [C

  • Java8中AbstractExecutorService与FutureTask源码详解

    目录 前言 一.AbstractExecutorService 1.定义 2.submit 3.invokeAll 4.invokeAny 二.FutureTask 1.定义 2.构造方法 3.get 4.run/ runAndReset 5. cancel 三.ExecutorCompletionService 1.定义 2.submit 3.take/ poll 总结 前言 本篇博客重点讲解ThreadPoolExecutor的三个基础设施类AbstractExecutorService.F

  • React commit源码分析详解

    目录 总览 commitBeforeMutationEffects commitMutationEffects 插入 dom 节点 获取父节点及插入位置 判断当前节点是否为单节点 在对应位置插入节点 更新 dom 节点 更新 HostComponent 更新 HostText 删除 dom 节点 unmountHostComponents commitNestedUnmounts commitUnmount commitLayoutEffects 执行生命周期 处理回调 总结 总览 commit

  • SpringCloud微服务续约实现源码分析详解

    目录 一.前言 二.客户端续约 1.入口 构造初始化 initScheduledTasks()调度执行心跳任务 2.TimedSupervisorTask组件 构造初始化 TimedSupervisorTask#run()任务逻辑 3.心跳任务 HeartbeatThread私有内部类 发送心跳 4.发送心跳到注册中心 构建请求数据发送心跳 三.服务端处理客户端续约 1.InstanceRegistry#renew()逻辑 2.PeerAwareInstanceRegistryImpl#rene

  • Java CompletableFuture实现原理分析详解

    目录 简介 CompletableFuture类结构 CompletableFuture回调原理 CompletableFuture异步原理 总结 简介 前面的一篇文章你知道Java8并发新特性CompletableFuture吗?介绍了CompletableFuture的特性以及一些使用方法,今天我们主要来聊一聊CompletableFuture的回调功能以及异步工作原理是如何实现的. CompletableFuture类结构 1.CompletableFuture类结构主要有两个属性 pub

  • Android 动态注册监听网络变化实例详解

    Android 动态注册监听网络变化实例详解 新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle

  • Java逃逸分析详解及代码示例

    概念引入 我们都知道,Java 创建的对象都是被分配到堆内存上,但是事实并不是这么绝对,通过对Java对象分配的过程分析,可以知道有两个地方会导致Java中创建出来的对象并一定分别在所认为的堆上.这两个点分别是Java中的逃逸分析和TLAB(Thread Local Allocation Buffer)线程私有的缓存区. 基本概念介绍 逃逸分析,是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法.通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的

随机推荐