Java 8, 发布于2014年3月,带来了一系列令人兴奋的新特性,其中最显著的包括Lambda表达式、Stream API、新的日期时间API和接口的默认方法与静态方法。这些增强大大提高了Java的表达能力,简化了代码的复杂性,并改进了数据处理能力。下面对这些特性进行简要介绍:
1. Lambda 表达式
Lambda 表达式是一个匿名函数,它为Java添加了函数式编程的能力。Lambda表达式简化了表示匿名内部类的语法。它主要用于定义简洁的方法传递给集合类的方法或启动新线程等场景。
语法示例:
// 使用匿名内部类
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Hello from thread");}
}).start();// 使用Lambda表达式
new Thread(() -> System.out.println("Hello from thread")).start();
2. Stream API
Stream API 是处理集合的关键抽象概念,它提供了一种高效且简洁的方式来处理Java集合。Stream API 支持顺序和并行聚合操作。
示例:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");myList.stream() // 创建流.filter(s -> s.startsWith("c")) // 过滤.map(String::toUpperCase) // 映射每个元素到对应的结果.sorted() // 排序.forEach(System.out::println); // C1 C2
3. 新的日期时间 API
Java 8 引入了全新的日期时间API,位于java.time
包下,这个设计借鉴自Joda-Time库,解决了旧的日期类中存在的问题。这些API线程安全且不可变,使用起来更加简单。
示例:
LocalDate today = LocalDate.now(); // 输出今天的日期
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); // 日期操作
4. 接口中的默认方法和静态方法
Java 8 允许在接口中包含具有实现的方法,这些方法被称为默认方法和静态方法。这允许旧接口添加新方法而不破坏现有的实现。
示例:
interface Vehicle {default void print() {System.out.println("I am a vehicle!");}static void blowHorn() {System.out.println("Blowing horn!!!");}
}
5. Optional 类
Optional<T>
类是一个容器类,代表一个值存在或不存在。它被用来解决空指针异常, 引导开发者主动去处理可能为null的情况。
示例:
Optional<String> optional = Optional.of("hello");if (optional.isPresent()) { // 判断值是否存在System.out.println(optional.get()); // 获取值
}optional.ifPresent(System.out::println); // 推荐的Optional使用模式
Java 8 的这些特性使得Java语言在表达力、灵活性和功能性上达到了一个新的水平,使编程变得更加愉悦和高效。