📌 目录
- Java 8 简介
- Lambda 表达式
- 函数式接口
- Stream API
- 默认方法 (Default Methods)
- 新的日期和时间 API
- Optional 类
- Java 8 新特性总结
- 参考资料
- 出站链接
1. Java 8 简介
Java 8 是一个具有许多新特性的重大版本,它带来了许多语言层面的创新,目的是使 Java 编程语言更加现代化,支持更高效的代码写作和执行。这些新特性让 Java 编程更加简洁、功能更强大,特别是在处理集合和函数式编程方面的提升。Java 8 还为开发人员提供了处理并行计算、时间日期处理和更好的代码抽象的方法。
2. Lambda 表达式
Lambda 表达式是 Java 8 中最重要的特性之一,它允许你将函数作为参数传递给方法。它使得 Java 可以像其他函数式编程语言一样处理操作。Lambda 表达式简化了代码的书写,尤其是在处理集合、并行操作和事件监听时。
语法:
(parameters) -> expression
示例:
public class LambdaExample {
public static void main(String[] args) {
// 使用 Lambda 表达式实现一个接口的匿名类
Runnable r = () -> System.out.println("Hello, Lambda!");
r.run();
}
}
上述代码通过 Lambda 表达式简化了 Runnable
接口的实现,r.run()
会打印 “Hello, Lambda!”。
3. 函数式接口
函数式接口是只包含一个抽象方法的接口,Java 8 引入了 @FunctionalInterface
注解来标识这种接口。这种接口可以用 Lambda 表达式或者方法引用来实例化。
示例:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod();
}
你可以使用 Lambda 表达式来实现该接口:
public class FunctionalInterfaceExample {
public static void main(String[] args) {
MyFunctionalInterface myInterface = () -> System.out.println("Functional interface method");
myInterface.myMethod();
}
}
4. Stream API
Stream API 是 Java 8 引入的一个新特性,旨在简化集合的操作,特别是在进行过滤、排序、聚合等操作时。Stream 通过管道操作(Pipeline)来链式处理数据,可以大大提高代码的可读性和可维护性。
示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
// 使用 Stream 进行过滤和收集操作
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0) // 过滤出偶数
.collect(Collectors.toList()); // 收集到一个 List
System.out.println(evenNumbers);
}
}
输出:
[2, 4, 6]
Stream API 支持并行处理,并且能够有效提高处理大数据集时的性能。
5. 默认方法 (Default Methods)
Java 8 引入了默认方法,使得接口能够拥有方法的默认实现。这样做的目的是允许接口在不破坏现有实现的情况下增加新的功能。
示例:
public interface MyInterface {
// 默认方法
default void printMessage() {
System.out.println("This is a default method.");
}
}
public class MyClass implements MyInterface {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.printMessage(); // 使用接口中的默认方法
}
}
输出:
This is a default method.
6. 新的日期和时间 API
Java 8 引入了全新的日期和时间 API,位于 java.time
包中。新的 API 比旧的 java.util.Date
和 java.util.Calendar
更加简洁和易用,且解决了线程安全和时区的问题。
示例:
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeExample {
public static void main(String[] args) {
// 当前日期
LocalDate date = LocalDate.now();
System.out.println("当前日期: " + date);
// 当前时间
LocalTime time = LocalTime.now();
System.out.println("当前时间: " + time);
// 当前日期和时间
LocalDateTime dateTime = LocalDateTime.now();
System.out.println("当前日期和时间: " + dateTime);
// 格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = dateTime.format(formatter);
System.out.println("格式化日期和时间: " + formattedDate);
}
}
输出:
当前日期: 2025-03-23
当前时间: 11:22:33.123456
当前日期和时间: 2025-03-23T11:22:33.123456
格式化日期和时间: 2025-03-23 11:22:33
7. Optional 类
Optional
类是 Java 8 引入的一个重要特性,用于防止出现 NullPointerException
。它是一个容器对象,可以包含非空的值,也可以为空。
示例:
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String value = "Hello";
// 创建一个 Optional 对象
Optional<String> optional = Optional.of(value);
// 检查值是否存在并输出
optional.ifPresent(v -> System.out.println(v.length())); // 输出值的长度
// 如果值为空,返回默认值
String result = optional.orElse("Default Value");
System.out.println(result);
}
}
输出:
5
Hello
Optional
可以避免直接进行空值检查,通过流式编程风格的方式提高代码的可读性。
8. Java 8 新特性总结
- Lambda 表达式:允许以更简洁的方式编写代码,特别是在处理集合、事件等。
- 函数式接口:通过
@FunctionalInterface
注解,支持以 Lambda 表达式作为接口实现。 - Stream API:使得数据处理更加高效、简洁,可以进行过滤、排序、聚合等操作。
- 默认方法:使得接口可以有默认实现,不会破坏已有实现。
- 新的日期时间 API:提供了更强大的日期和时间处理功能,解决了旧 API 的问题。
- Optional 类:避免了空指针异常,使代码更加安全和可读。
发表回复