java8的新特性

Java 8 是 Java 语言发展的一个重要里程碑,引入了许多革命性的特性。以下是 Java 8 的主要新特性:

一、Lambda 表达式

函数式编程的核心特性

java 复制代码
// 旧方式
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello");
    }
}).start();

// Lambda 表达式
new Thread(() -> System.out.println("Hello")).start();

// 更复杂的例子
list.sort((a, b) -> a.compareTo(b));

二、函数式接口

只有一个抽象方法的接口,可以使用 @FunctionalInterface 注解

java 复制代码
@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);
}

// 使用
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;

三、Stream API

处理集合数据的流式操作

java 复制代码
List<String> list = Arrays.asList("a", "b", "c", "d");

// 过滤、映射、收集
List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .map(String::toUpperCase)
    .collect(Collectors.toList());

// 并行流处理
long count = list.parallelStream()
    .filter(s -> s.length() > 0)
    .count();

四、方法引用

简化 Lambda 表达式

java 复制代码
// 四种方法引用形式
// 1. 静态方法引用
Function<String, Integer> parser = Integer::parseInt;

// 2. 实例方法引用
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(System.out::println);

// 3. 对象方法引用
String str = "Hello";
Supplier<Integer> lengthSupplier = str::length;

// 4. 构造器引用
Supplier<List<String>> listSupplier = ArrayList::new;

五、Optional 类

解决空指针异常

java 复制代码
Optional<String> optional = Optional.ofNullable(getString());

// 安全操作
optional.ifPresent(System.out::println);

String value = optional.orElse("default");

// 链式调用
optional.map(String::toUpperCase)
        .filter(s -> s.length() > 0)
        .orElse("empty");

六、新的日期时间 API

位于 java.time 包下

java 复制代码
// 日期
LocalDate today = LocalDate.now();
LocalDate specificDate = LocalDate.of(2024, 1, 20);

// 时间
LocalTime currentTime = LocalTime.now();

// 日期时间
LocalDateTime now = LocalDateTime.now();

// 时区
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));

// 时间差
Duration duration = Duration.between(startTime, endTime);
Period period = Period.between(startDate, endDate);

七、接口的默认方法和静态方法

java 复制代码
interface Vehicle {
    // 默认方法
    default void print() {
        System.out.println("I am a vehicle!");
    }
    
    // 静态方法
    static void blowHorn() {
        System.out.println("Blowing horn!");
    }
}

interface FourWheeler {
    default void print() {
        System.out.println("I am a four wheeler!");
    }
}

// 解决多重继承冲突
class Car implements Vehicle, FourWheeler {
    @Override
    public void print() {
        Vehicle.super.print();  // 显式调用指定接口的默认方法
        FourWheeler.super.print();
    }
}

八、Nashorn JavaScript 引擎

java 复制代码
ScriptEngine engine = new ScriptEngineManager()
    .getEngineByName("nashorn");
    
engine.eval("print('Hello Nashorn!');");

九、并行数组

java 复制代码
int[] array = new int[10000];
Arrays.parallelSetAll(array, i -> i * 2);
Arrays.parallelSort(array);

十、重复注解

java 复制代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Filters {
    Filter[] value();
}

@Repeatable(Filters.class)
@interface Filter {
    String value();
}

// 可以重复使用同一注解
@Filter("filter1")
@Filter("filter2")
class MyClass {}

十一、其他改进

  1. Base64 支持java.util.Base64
  2. CompletableFuture:增强的异步编程
  3. StampedLock:改进的锁机制
  4. 并行累加器DoubleAdder, LongAdder

使用示例

java 复制代码
public class Java8Features {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", 25),
            new Person("Bob", 30),
            new Person("Charlie", 35)
        );
        
        // Stream + Lambda + 方法引用
        List<String> names = people.stream()
            .filter(p -> p.getAge() > 25)
            .map(Person::getName)
            .sorted()
            .collect(Collectors.toList());
    }
}

这些特性极大地提升了 Java 的生产力,使代码更加简洁、可读性更强,并为函数式编程在 Java 中的应用奠定了基础。

相关推荐
星子落怀aa16 分钟前
Java 反复报错?Gemini助力修复
java
半夜修仙19 分钟前
RabbitMQ中如何保证消息的可靠性传输
java·分布式·中间件·rabbitmq·github·java-rabbitmq
Flittly21 分钟前
【AgentScope Java新手村系列】(3)工具系统
java·spring boot·spring
吴声子夜歌23 分钟前
Java——多线程编程技巧
java·多线程
AI行业学习37 分钟前
CC-Switch v3.16.1 官方下载 | 安装配置详细教程【2026.6.10】
java·开发语言·vue.js·python·mysql·eclipse·html
不负岁月无痕1 小时前
C++ 模板核心内容与高频面试题汇总
java·开发语言·c++
Flittly1 小时前
【AgentScope Java新手村系列】(2)第一个Agent-基础对话
java·spring boot·spring·ai
摇滚侠2 小时前
Spring MVC 不是一个单独的框架,是 Spring 框架的一个模块
java·spring·mvc
阿正的梦工坊2 小时前
【Rust】04-借用、引用与切片
java·数据库·rust
devilnumber2 小时前
静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
java·开发语言·代理模式