JDK1.8 是 Java 语言开发的一个主要版本,于 2014 年 3 月 18 日发布。JDK1.8 引入了许多新特性,其中常用的有以下几个:
- Lambda 表达式:Lambda 表达式是一种匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。
- 方法引用:方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实例)的方法或构造器。
- 默认方法:默认方法就是一个在接口里面有了一个实现的方法。
- 新的日期时间 API:Java 8 中新的时间和日期管理 API 深受 Joda-Time 影响,并吸收了很多 Joda-Time 的精华,新的 java.time 包包含了所有关于日期、时间、时区、Instant(跟日期类似但是精确到纳秒)、duration(持续时间)和时钟操作的类。
- Optional 类:Optional 类用于避免空指针异常。
- Stream API:Stream API 提供了一种新的处理集合的方式,可以使集合操作更加简洁、高效。
以下是一些使用这些新特性的示例:
Lambda 表达式
List<String> names = Arrays.asList("Alice", "Bob", "Carol");
// 使用 Lambda 表达式过滤出长度大于 5 的名字
List<String> longNames = names.stream()
.filter(name -> name.length() > 5)
.collect(Collectors.toList());
System.out.println(longNames); // [Carol]
方法引用
List<String> names = Arrays.asList("Alice", "Bob", "Carol");
// 使用方法引用将所有名字转换为大写
List<String> uppercaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(uppercaseNames); // [ALICE, BOB, CAROL]
默认方法
interface MyInterface {
default void doSomething() {
System.out.println("I'm doing something!");
}
}
class MyClass implements MyInterface {
// 默认方法可以被重写
@Override
public void doSomething() {
System.out.println("I'm doing something else!");
}
}
MyClass myClass = new MyClass();
myClass.doSomething(); // I'm doing something else!
新的日期时间 API
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime datetime = LocalDateTime.now();
System.out.println(date); // 2023-09-21
System.out.println(time); // 12:01:18
System.out.println(datetime); // 2023-09-21T12:01:18
Optional 类
String name = "Alice";
// 使用 Optional 类避免空指针异常
Optional<String> optionalName = Optional.of(name);
if (optionalName.isPresent()) {
System.out.println(optionalName.get()); // Alice
} else {
System.out.println("name is empty");
}
Stream API
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用 Stream API 求和
int sum = numbers.stream()
.reduce(0, Integer::sum);
System.out.println(sum); // 15