Lambda 表达式是 JDK 8 中最重要的特性之一,它为 Java 引入了函数式编程的概念。Lambda 表达式允许你以简洁的方式表示函数或传递行为,而无需创建冗长的匿名内部类。
示例:
// 传统方式使用匿名内部类
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello from anonymous class");
}
};
// 使用 Lambda 表达式
Runnable runnableLambda = () -> System.out.println("Hello from lambda");
函数式接口是仅包含一个抽象方法的接口,JDK 8 为其引入了 @FunctionalInterface
注解。Lambda 表达式可以作为函数式接口的实例。常见的函数式接口包括 Runnable
、Callable
、Comparator
等。
示例:
@FunctionalInterface
interface MyFunction {
void execute();
}
public class Main {
public static void main(String[] args) {
MyFunction function = () -> System.out.println("Functional interface with lambda");
function.execute();
}
}
Stream API 提供了一种高效、简洁的方式来处理集合数据。Stream 支持链式操作,可以对集合数据进行过滤、排序、映射、聚合等操作,大大简化了对集合的处理。
示例:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // 输出: [2, 4, 6]
JDK 8 允许在接口中定义 默认方法 和 静态方法。默认方法使用 default
关键字定义,它们提供了接口的默认实现,而静态方法则可以直接在接口中实现。
示例:
interface MyInterface {
// 默认方法
default void defaultMethod() {
System.out.println("This is a default method");
}
// 静态方法
static void staticMethod() {
System.out.println("This is a static method");
}
}
class MyClass implements MyInterface {
// 可以选择重写默认方法
}
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.defaultMethod(); // 调用默认方法
MyInterface.staticMethod(); // 调用静态方法
}
}
方法引用 是另一种简化 Lambda 表达式的方式,它允许你通过 ::
操作符直接引用已有的方法或构造函数,增强了代码的可读性。
示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用方法引用
names.forEach(System.out::println);
Optional 类是 JDK 8 引入的用于避免 null
值引发的 NullPointerException
的工具类。它提供了一种优雅的方式来处理可能为 null
的值。
示例:
Optional<String> optional = Optional.ofNullable(getSomeString());
optional.ifPresent(s -> System.out.println(s));
String result = optional.orElse("Default Value");
JDK 8 引入了全新的 日期和时间 API,位于 java.time
包下,这个新的 API 提供了更好的设计、更强的类型安全性,并且更加易用。它包括 LocalDate
、LocalTime
、LocalDateTime
、ZonedDateTime
等类。
示例:
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
System.out.println(date);
System.out.println(time);
System.out.println(dateTime);
JDK 8 包含了 Nashorn JavaScript 引擎,它允许在 Java 程序中嵌入和执行 JavaScript 代码。Nashorn 取代了原来的 Rhino 引擎,提供了更好的性能和互操作性。
示例:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
try {
engine.eval("print('Hello from JavaScript')");
} catch (ScriptException e) {
e.printStackTrace();
}
OutOfMemoryError
的可能性。java.util.Arrays
提供了 parallelSort
方法,允许并行排序数组。ConcurrentHashMap
的性能,并引入了 CompletableFuture
类,简化了异步编程。JDK 8 引入了许多重要的新特性,特别是 Lambda 表达式和 Stream API,这些特性极大地简化了代码编写,提升了 Java 的开发效率和代码可读性。此外,新的日期和时间 API、Optional 类、接口的默认方法等,也都显著改善了 Java 的功能性和灵活性。