发展历程

  1. 1995年,Java 1.0发布。这是Java首次公开亮相,以"一次编写,随处运行"的特性吸引了大量的开发者。

  2. 1998年,Java的 1.2版本被发布,被称为Java 2。这个版本中引入了一些关键新特性,包括JFC/Swing API、集合框架和JVM即时编译器。同时也划分出了Java SE(标准版)、Java EE(企业版)和Java ME(微版)三个版本。

  3. 2004年,Java 5.0版本发布,该版本提供了许多新功能,包括泛型,自动装箱/拆箱,增强的for循环,枚举、可变参数等,让Java语言更有表现力,同时更加易用。

  4. 2011年,Oracle收购了Sun Microsystems,成为Java的新的开发者和维护者。

  5. 2014年,Java 8发布,虽然这个版本的更新很大,但最受欢迎的无疑是Lambda表达式和流API的加入,这也带来了函数式编程的特性。同时还加入了接口默认方法和静态方法等新特性,进一步提升了Java的灵活性。

  6. 2017年开始,Java实施了新的发布计划,每6个月发布一个新版本,以实现更快速的迭代。Java 9引入了模块系统,Java 10添加了局部类型推断,Java 12引入了Switch表达式(预览)等。

  7. 在2021年,Java 17以长期支持版本(LTS)的身份发布,它引入了一些新特性,例如新增的switch模式匹配(预览版)以及全新的外部函数和内存API(第一轮孵化)和Vector API(第二轮孵化),进一步丰富了Java的功能。

  8. 到了2024年,Java 21的发布,将Java 19开始引入的虚拟线程正式成为正式特性。虚拟线程是轻量级的线程,极大地丰富了Java程序的并发运行能力。

补充

jdk16

record轻量的类声明

Java 的 record 是 JDK 16 中引入的一个新特性。它是一种轻量级的类声明,用于声明不可变数据对象。使用 record 可以让开发人员更容易地编写简洁、可读性更高的代码。

Record 是一个类,其主要特征是将属性定义为 final、私有和不可变的。同时,它还提供了一个紧凑的语法来定义这些属性以及与之相关的方法。

以下是一个简单的 record 的例子:

public record Person(String name, int age) {
    // 构造函数和访问方法会被自动生成
}

在上面的代码中,我们定义了一个名为 Person 的 record,它有两个属性:nameage。由于这些属性是 final 和私有的,所以我们无法在创建对象后更改它们的值。

Record 还会自动生成一个带有相同名称和参数的构造函数和访问方法,因此我们可以像下面这样创建和访问 Person 对象:

Person person = new Person("Alice", 30);
System.out.println(person.name());
System.out.println(person.age());

输出结果为:

Alice
30

使用 record 可以帮助我们更轻松地定义不可变的数据对象,避免了手动编写大量的构造函数和访问方法的麻烦。同时,由于 record 生成的代码量比较少,因此它也能够提高代码的可读性和可维护性。

使用不可变对象可以带来多种好处

  1. 线程安全:不可变对象是线程安全的,因为多个线程不能修改其状态。因此,当多个线程访问同一不可变对象时,不需要担心竞态条件。
  2. 安全性:由于不可变对象不会发生状态变化,因此它们在设计上更容易推理和验证。这可以减少由于状态变化而导致的各种问题,例如状态不一致和意外行为。
  3. 可重用性:不可变对象可以重复使用,因为它们具有相同的状态。这可以帮助我们避免不必要的对象创建和垃圾回收,从而提高应用程序的性能。
  4. 简化代码:使用不可变对象可以简化代码。由于不可变对象没有可变状态,因此不需要实现修改器方法。这样可以减少实现和维护代码的复杂性。

在Java中,record 是一种轻量级的不可变类声明,可以轻松地定义不可变对象。使用 record 可以使代码更简洁,易读,易维护,并提高应用程序的性能。

和Lombok有啥区别

Lombok 和 Java 的 record 都是用于简化 Java 代码的工具,但是它们有一些区别。

Lombok 是一个开源的 Java 库,可以通过注解来自动生成常用的 Java 代码,例如 getter 和 setter 方法、构造函数、equals 和 hashCode 方法等。这些自动生成的代码可以帮助开发人员编写更简洁、易读的代码。但是,Lombok 仍然需要使用类来定义数据对象,因此它不能直接替代 Java 的 record。

与 Lombok 不同,Java 的 record 是一种原生的语言特性,它被设计用于声明不可变的数据对象。 Java 的 record 提供了一种紧凑的语法来定义不可变的类和属性,以及与之相关的方法,这些方法包括自动生成的构造函数、访问器和 equals、hashCode 方法。这些方法都是在编译时自动生成的,因此它们具有很高的效率,并且避免了手动编写这些方法的麻烦。

此外,Lombok 还提供了其他一些功能,例如日志记录、Builder 模式等,而 Java 的 record 则专注于定义不可变的数据对象。因此,开发人员应该根据自己的需求来选择使用哪种工具。

总的来说,Lombok 和 Java 的 record 都是用于简化 Java 代码的工具,它们各自具有优点和缺点。Lombok 提供了更多的功能,但 Java 的 record 是一个原生的语言特性,可以帮助开发人员更容易地定义不可变的数据对象。