一、Java 8 的核心新特性
Java 8 引入函数式编程思想,大幅提升开发效率,解决传统 Java 诸多痛点。
| 新特性分类 | 具体内容 | 简要说明 & 核心价值 |
|---|---|---|
| 函数式编程核心 | Lambda 表达式 | 1. 简化匿名内部类的编写,让代码更简洁紧凑; 2. 支持将"行为"作为参数传递,是函数式编程的基础; 3. 示例: List<String> list = Arrays.asList("a", "b"); list.forEach(s -> System.out.println(s)); |
| Stream API(java.util.stream) | 1. 对集合/数组进行声明式、流水线式处理(过滤、映射、排序、聚合等); 2. 支持串行/并行执行,轻松实现数据批量处理,提升效率; 3. 示例: list.stream().filter(s -> s.length() > 1).count();(统计长度大于1的元素数量) | |
| 新日期时间API | java.time 包 | 1. 替代传统的Date、Calendar(线程不安全、API设计混乱);2. 提供 LocalDate、LocalTime、LocalDateTime、Instant等类,线程安全且API清晰;3. 支持日期计算、格式化、时区转换,示例: LocalDate today = LocalDate.now(); LocalDate nextWeek = today.plusWeeks(1); |
| 接口增强 | 默认方法(default)& 静态方法(static) | 1. 默认方法:接口中可以定义带实现的方法,解决"接口新增方法导致所有实现类必须修改"的兼容问题; 2. 静态方法:接口中可以定义静态工具方法,无需依赖实现类即可调用; 3. 示例: interface MyInterface { default void sayHello() { System.out.println("Hello"); } } |
| 其他实用特性 | Optional 类 | 1. 用于解决空指针异常(NullPointerException),优雅地处理空值; 2. 支持 isPresent()、orElse()、ifPresent()等方法,避免大量if (obj != null)判断;3. 示例: Optional<String> opt = Optional.ofNullable(null); System.out.println(opt.orElse("default"));(输出default) |
| 方法引用(Method Reference) | 1. 简化Lambda表达式的写法,当Lambda体只是调用一个已有方法时,可直接引用该方法; 2. 分为4种:静态方法引用、实例方法引用、对象方法引用、构造器引用; 3. 示例: list.forEach(System.out::println);(等价于list.forEach(s -> System.out.println(s));) | |
| Nashorn JavaScript 引擎 | 支持在Java中调用JavaScript代码,后续在Java 11中被废弃。 |
二、Java 11 的核心新特性
Java 11 在 Java 8 基础上做了大量优化、完善和废弃,新增特性更偏向实用化和性能提升。
| 新特性分类 | 具体内容 | 简要说明 & 核心价值 |
|---|---|---|
| 开发效率提升 | 局部变量类型推断(var 关键字) | 1. 用于局部变量声明,让编译器自动推断变量类型,简化代码; 2. 注意:仅支持局部变量(方法内)、必须初始化、不能用于成员变量/方法参数/返回值; 3. 示例: var str = "Hello Java 11";(编译器推断为String类型) |
| 字符串新增实用方法 | 1. String.isBlank():判断字符串是否为空白(包含空格、制表符、空字符串);2. String.strip():去除字符串首尾的空白(比trim()更强大,支持Unicode空白字符);3. String.stripLeading()/stripTrailing():分别去除首尾空白;4. String.repeat(int n):将字符串重复n次;5. 示例: " abc ".strip() → 结果为"abc";"a".repeat(3) → 结果为"aaa" | |
| 集合新增转数组方法(Collection.toArray()) | 1. 新增toArray(IntFunction<T[]>)方法,简化集合转数组的操作;2. 示例: List<String> list = Arrays.asList("a", "b"); String[] arr = list.toArray(String[]::new);(无需手动指定数组长度) | |
| 运行时 & 性能优化 | ZGC 垃圾回收器(实验性) | 1. 一款低延迟垃圾回收器,停顿时间不超过10毫秒,支持TB级内存; 2. 适合对响应时间要求极高的应用(如金融、电商秒杀),后续在Java 17中成为正式特性; 3. 启用参数: -XX:+UseZGC |
| Epsilon GC(无操作垃圾回收器) | 1. 只分配内存,不做任何垃圾回收,内存耗尽直接退出; 2. 用于性能测试、内存泄漏排查、短期运行的批量任务; 3. 启用参数: -XX:+UseEpsilonGC | |
| 移除JVM永久代(元空间Metaspace优化) | 进一步优化元空间内存管理,减少内存溢出风险,提升JVM稳定性。 | |
| 工具 & 语法优化 | 单文件Java程序运行(无需编译) | 1. 直接运行.java文件,无需先执行javac编译生成.class文件;2. 适合简单的脚本式Java程序,简化开发和测试流程; 3. 命令: java HelloWorld.java(HelloWorld.java中包含main方法) |
| HTTP Client API(正式版,java.net.http) | 1. 替代传统的HttpURLConnection,支持HTTP/1.1和HTTP/2,支持异步请求;2. API设计清晰,支持请求/响应拦截、超时设置、JSON数据处理; 3. 适合开发网络请求相关应用,性能更优、使用更便捷。 | |
| 废弃 & 移除 | 废弃Nashorn JS引擎、移除Java EE & CORBA模块 | 1. 移除了Java 8中的Nashorn JS引擎,推荐使用GraalVM替代; 2. 移除了不再常用的Java EE、CORBA相关API,精简JDK体积。 |
| 移除JDK中的jhat、jjs等工具 | 精简JDK工具集,推荐使用更现代的工具替代。 |