JAVA8新特性

例子代码:纠结哥/java-learn - Gitee.com

JDK 8(Java 8)是 Java 语言的一次重要更新,带来了许多新特性,主要包括以下几个方面

1. Lambda 表达式

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; }

2. 函数式接口(Functional Interface)

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

3. 方法引用(Method References)

方法引用是一种更简洁的 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

4. Stream API

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]

5. 默认方法(Default Methods)和静态方法

在 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(); // 调用静态方法
    }
}

6. 新时间 API(java.time)

Java 8 引入了全新的时间 API(java.time),取代了原有的 java.util.Datejava.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

7. Optional 类

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);

8. Nashorn JavaScript 引擎

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');");
    }
}

9. 新 Base64 API

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!"
    }
}

10. 并行排序(Parallel Sorting)

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]

你可能感兴趣的:(java,开发语言)