例子代码:纠结哥/java-learn - Gitee.com
JDK 8(Java 8)是 Java 语言的一次重要更新,带来了许多新特性,主要包括以下几个方面
Lambda 表达式(λ 表达式)是 Java 8 最重要的特性之一,使得 Java 具备了类似于函数式编程的能力,能够简化代码,提高可读性和可维护性。
示例:
// 传统方式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello, World!");
}
}).start();
// Lambda 方式
new Thread(() -> System.out.println("Hello, World!")).start();
Lambda 表达式的基本语法:
(parameters) -> expression
(parameters) -> { statements; }
Java 8 引入了函数式接口(即只有一个抽象方法的接口),并提供了 @FunctionalInterface
注解来标记。
示例:
@FunctionalInterface
interface MyFunction {
int apply(int a, int b);
}
// 使用 Lambda 表达式实现接口
MyFunction add = (a, b) -> a + b;
System.out.println(add.apply(5, 3)); // 输出 8
Java 8 还提供了一些内置的函数式接口:
Consumer
:消费型函数接口,无返回值Supplier
:供给型函数接口,无输入参数,返回 T
Function
:函数型接口,输入 T
,返回 R
Predicate
:断言型接口,返回 boolean
方法引用是一种更简洁的 Lambda 表达式写法,主要有以下几种类型:
ClassName::staticMethod
instance::instanceMethod
ClassName::instanceMethod
ClassName::new
示例:
// 静态方法引用
Function strToInt = Integer::parseInt;
System.out.println(strToInt.apply("123")); // 输出 123
// 实例方法引用
String str = "Hello, World!";
Supplier lengthSupplier = str::length;
System.out.println(lengthSupplier.get()); // 输出 13
Stream
API 提供了一种高效处理集合的方式,支持链式调用,极大地简化了集合操作,支持过滤(filter)、映射(map)、归约(reduce)、收集(collect)等操作。
示例:
List list = Arrays.asList("apple", "banana", "cherry", "date");
// 过滤长度大于 5 的字符串并转换为大写
List result = list.stream()
.filter(s -> s.length() > 5)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(result); // 输出 [BANANA, CHERRY]
在 Java 8 之前,接口不能有方法的实现。Java 8 允许在接口中定义默认方法和静态方法,这样就可以在不破坏已有实现的情况下增强接口功能。
示例:
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 obj = new MyClass();
obj.defaultMethod(); // 调用默认方法
MyInterface.staticMethod(); // 调用静态方法
}
}
Java 8 引入了全新的时间 API(java.time
),取代了原有的 java.util.Date
和 java.util.Calendar
,提供更好的日期时间操作方式。
示例:
// 获取当前日期
LocalDate today = LocalDate.now();
System.out.println(today); // 2025-02-04
// 获取当前时间
LocalTime now = LocalTime.now();
System.out.println(now); // 14:30:45.123
// 日期运算
LocalDate future = today.plusDays(10);
System.out.println(future); // 2025-02-14
Optional
用于避免 NullPointerException
,提供了更加优雅的空值处理方案。
示例:
Optional optional = Optional.ofNullable(null);
// 判断是否存在值
System.out.println(optional.isPresent()); // false
// 获取值(有默认值)
System.out.println(optional.orElse("Default Value")); // "Default Value"
// 使用 Lambda 处理
optional.ifPresent(System.out::println);
Java 8 提供了 Nashorn JavaScript 引擎,允许在 Java 代码中直接执行 JavaScript 代码。
示例:
import javax.script.*;
public class NashornExample {
public static void main(String[] args) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
engine.eval("print('Hello from JavaScript');");
}
}
Java 8 提供了 java.util.Base64
进行 Base64 编解码。
示例:
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String original = "Hello, Java 8!";
String encoded = Base64.getEncoder().encodeToString(original.getBytes());
System.out.println(encoded); // 输出 Base64 编码
String decoded = new String(Base64.getDecoder().decode(encoded));
System.out.println(decoded); // "Hello, Java 8!"
}
}
Java 8 在 Arrays
类中引入了 parallelSort
方法,可以使用多线程并行排序,提高大数据集合的排序性能。
示例:
int[] numbers = {5, 2, 8, 1, 3};
Arrays.parallelSort(numbers);
System.out.println(Arrays.toString(numbers)); // [1, 2, 3, 5, 8]