Java 8 是 Java 语言的一个重要版本,于 2014 年发布。它引入了许多新特性和改进,极大地提升了语言的表达能力和开发效率。以下是 Java 8 的一些主要新特性:
1. Lambda 表达式
- 概述:Lambda 表达式允许以更简洁的方式编写匿名函数,支持函数式编程风格。
语法:
(参数列表) -> { 表达式或代码块 }
示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(name -> System.out.println(name));
- 作用:简化代码,提升可读性,支持函数式接口(如
Runnable
、Comparator
等)。
2. 函数式接口(Functional Interfaces)
- 概述:函数式接口是只包含一个抽象方法的接口,可以使用 Lambda 表达式实现。
示例:
@FunctionalInterface interface MyFunction { void doSomething(String input); }
内置函数式接口:
java.util.function
包中提供了常用的函数式接口,如:Predicate<T>
:接收一个参数,返回布尔值。Consumer<T>
:接收一个参数,无返回值。Function<T, R>
:接收一个参数,返回一个结果。Supplier<T>
:不接收参数,返回一个结果。
3. Stream API
- 概述:Stream API 提供了一种高效且易于使用的方式来处理集合数据。
特点:
- 支持链式操作(如过滤、映射、排序等)。
- 支持并行处理,提升性能。
示例:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList());
常用操作:
filter
:过滤元素。map
:转换元素。reduce
:聚合操作。collect
:将结果收集到集合中。
4. 接口的默认方法(Default Methods)
- 概述:允许在接口中定义带有默认实现的方法,避免破坏现有实现类。
语法:
interface MyInterface { default void doSomething() { System.out.println("Default implementation"); } }
作用:
- 支持接口的向后兼容性。
- 允许接口提供默认行为,减少抽象类的使用。
5. 接口的静态方法(Static Methods)
- 概述:允许在接口中定义静态方法,提供工具方法。
示例:
interface MyInterface { static void printMessage() { System.out.println("Static method in interface"); } }
6. Optional 类
- 概述:
Optional<T>
是一个容器类,用于避免null
值的潜在问题。 示例:
Optional<String> optional = Optional.ofNullable(null); System.out.println(optional.orElse("Default value"));
常用方法:
of
:创建包含非空值的Optional
。ofNullable
:创建包含可能为空值的Optional
。orElse
:如果值为空,返回默认值。isPresent
:检查值是否存在。
7. 新的日期和时间 API(Date and Time API)
- 概述:新的日期和时间 API 位于
java.time
包中,解决了旧的Date
和Calendar
类的许多问题。 主要类:
LocalDate
:表示日期(如 2024-10-01)。LocalTime
:表示时间(如 15:30:00)。LocalDateTime
:表示日期和时间。ZonedDateTime
:表示带时区的日期和时间。
示例:
LocalDate today = LocalDate.now(); LocalTime now = LocalTime.now(); System.out.println("Today: " + today); System.out.println("Now: " + now);
8. 方法引用(Method References)
- 概述:方法引用是 Lambda 表达式的简化形式,用于引用已有的方法。
语法:
- 类名::静态方法
- 对象名::实例方法
- 类名::实例方法
- 类名::new(构造方法引用)
示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(System.out::println);