Java 7之后主要的新特性
从Java 7之后都有哪些主要的新特性?比较有用和常用的。
从 Java 7 之后到现在,Java 的演进其实非常大,尤其是 Java 8 是一个分水岭。我按版本帮你梳理一下“最常用、最实用”的核心特性(重点会放在开发中真的会用到的)。
一、Java 7(2011)— 语法小增强,但很实用
虽然不算革命性,但很多细节优化至今还在用:
✅ 1. try-with-resources(非常常用)
自动关闭资源,替代 finally
try (BufferedReader br = new BufferedReader(new FileReader("a.txt"))) {
return br.readLine();
}
👉 不用再手动 close()
✅ 2. Switch 支持 String
switch (str) {
case "A": break;
}
✅ 3. Diamond 操作符 <>
List<String> list = new ArrayList<>();
✅ 4. 多异常捕获
catch (IOException | SQLException e) {
}
二、Java 8(2014)— ⭐最重要版本(必须掌握)
这是现代 Java 的核心。
✅ 1. Lambda 表达式(核心)
list.forEach(item -> System.out.println(item));
👉 本质:函数式编程
✅ 2. Stream API(非常重要)
list.stream()
.filter(x -> x > 10)
.map(x -> x * 2)
.collect(Collectors.toList());
👉 替代 for 循环的“声明式写法”
✅ 3. Functional Interface(函数式接口)
@FunctionalInterface
interface MyFunc {
void run();
}
✅ 4. Optional(避免 NPE)
Optional.ofNullable(user)
.map(User::getName)
.orElse("default");
✅ 5. 方法引用
list.forEach(System.out::println);
✅ 6. 默认方法(接口增强)
interface A {
default void hello() {}
}
✅ 7. 新时间 API(替代 Date)
LocalDate.now();
LocalDateTime.now();
👉 比 Date / Calendar 好太多
三、Java 9(2017)— 模块化(了解即可)
✅ 1. 模块系统(JPMS)
module com.example {
requires java.base;
}
👉 实际开发中用得不多(Android基本不用)
✅ 2. List.of()(常用)
List.of(1, 2, 3);
四、Java 10(2018)
✅ 1. var(局部变量类型推断)
var list = new ArrayList<String>();
👉 Kotlin 风格一点点靠近
五、Java 11(LTS,长期支持)⭐
很多公司从 Java 8 → 11
✅ 1. String 增强
"".isBlank();
"abc".repeat(3);
✅ 2. HttpClient(替代 HttpURLConnection)
HttpClient.newHttpClient();
✅ 3. Files API 增强
Files.readString(path);
六、Java 14(预览) / Java 16(正式)
✅ 1. switch 表达式(很实用)
int result = switch (day) {
case MONDAY -> 1;
default -> 0;
};
✅ 2. Text Blocks(多行字符串)
String json = """
{
"name": "test"
}
""";
七、Java 16 — Record(非常有用)
✅ 1. record(替代 data class)
record User(String name, int age) {}
👉 自动生成:
- getter
- equals
- hashCode
- toString
八、Java 17(LTS)⭐
很多公司现在主流版本
✅ 1. Sealed Class(限制继承)
public sealed class Shape permits Circle, Square {}
九、Java 21(LTS)⭐(最新主流)
非常值得关注
✅ 1. 虚拟线程(重大特性🔥)
Thread.startVirtualThread(() -> {
System.out.println("Hello");
});
👉 类似:
- Kotlin 协程
- Go 协程
👉 优势:
- 超高并发
- 更轻量
✅ 2. Pattern Matching(增强版 instanceof)
if (obj instanceof String s) {
System.out.println(s.length());
}
✅ 3. Record Pattern / Switch Pattern(进阶)
switch (obj) {
case String s -> ...
}
总结(重点掌握)
如果你是做 Android / 后端开发,建议重点掌握:
⭐ 必会(高频)
- Lambda
- Stream
- Optional
- 新时间 API
- try-with-resources
⭐ 很实用
- var
- List.of()
- switch 新写法
- Text Block
⭐ 进阶推荐
- record
- sealed class
- pattern matching
⭐ 新趋势(非常重要)
- 虚拟线程(Java 21)
一句话总结
👉 Java 7 之后的演进,本质是三件事:
- 代码更简洁(Lambda / var / record)
- 更函数式(Stream / Optional)
- 更高并发(虚拟线程)
如果你愿意,我可以帮你做一个对比:
👉 Java vs Kotlin(你做 Android,这个会非常有帮助)
做Android开发,如果minSdk设置为21,那有哪些Java的新特性我是可以使用的?
这个问题很关键,而且很多 Android 开发者会有一个误区:
👉 minSdk = 21 ≠ 你只能用 Java 7
实际上,Android 上“能用哪些 Java 特性”取决于两件事:
一、核心结论(先说最重要的)
如果你现在用的是:
- Android Studio(较新版本)
- Gradle + D8/R8
- Kotlin 1.8+ / AGP 7+
👉 那么:
✅ 即使 minSdk = 21,你也可以用:
👉 Java 8 绝大多数特性 + 部分 Java 11 特性
原因:
👉 Desugaring(语法糖降级)机制
二、你能用的 Java 特性(按重要程度)
⭐ 一、完全可以放心用(强烈推荐)
✅ 1. Lambda(100%可用)
list.forEach(item -> Log.d("TAG", item));
✔ 已完全支持(通过 desugar)
✅ 2. 方法引用
list.forEach(System.out::println);
✅ 3. Stream API(可用,但注意性能)
list.stream()
.filter(x -> x > 10)
.collect(Collectors.toList());
✔ Android 8+ 原生支持
✔ 低版本 → desugar 提供支持
⚠ 但注意:
- 在 Android 上 性能不如普通 for 循环
- 不适合频繁调用(如 UI / 视频处理)
👉 你做音视频开发,这点很重要
✅ 4. Optional
Optional.ofNullable(user)
.map(User::getName)
.orElse("default");
✔ 可用,但:
⚠ Android 上不推荐滥用:
- 会增加对象创建
- 影响性能
✅ 5. 接口默认方法
interface A {
default void test() {}
}
✅ 6. 新时间 API(强烈推荐)
LocalDateTime.now();
✔ 通过 desugar 支持
✔ 推荐替代 Date
✅ 7. try-with-resources
try (InputStream is = ...) {
}
⭐ 二、可以用(但要开启配置)
需要开启:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
coreLibraryDesugaringEnabled true
}
}
dependencies {
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4"
}
✅ 8. Java 9+ 集合工厂方法
List.of(1, 2, 3);
Map.of("a", 1);
✅ 9. String 新方法(部分)
"".isBlank();
"abc".repeat(3);
✅ 10. Files API(部分)
Files.readString(path);
⚠ 三、不能用 / 不推荐用
❌ 1. var(Java 10)
var list = new ArrayList<>();
👉 Android 不支持(Java 编译器限制)
❌ 2. record(Java 16)
record User(String name, int age) {}
👉 Android 不支持(目前)
👉 用 Kotlin data class 替代更好
❌ 3. sealed class(Java 17)
👉 不支持(Java版本限制)
👉 Kotlin 有更好的 sealed class
❌ 4. 虚拟线程(Java 21)
👉 完全不支持
👉 Android 用:
- 协程(Kotlin)
- 线程池
❌ 5. 模块系统(Java 9)
👉 Android 不支持 JPMS
三、总结(非常关键)
✅ Android(minSdk 21)实际能力:
| 类型 | 支持情况 |
|---|---|
| Java 7 | ✅ 全支持 |
| Java 8 | ✅ 几乎全支持 |
| Java 9+ API | ⚠ 部分支持(靠 desugar) |
| Java 10+ 语法 | ❌ 基本不支持 |
四、给你的建议(结合你做音视频开发)
你现在的方向(YUV / OpenGL / 编码):
✅ 推荐用
- Lambda(写代码更清爽)
- try-with-resources
- 新时间 API
- 接口 default 方法
⚠ 谨慎用
- Stream(性能问题)
- Optional(对象开销)
❌ 不要指望
- record → 用 Kotlin
- 虚拟线程 → 用协程
- var → Kotlin already better
五、一句话总结
👉 Android = Java 8 + “部分 Java 11 API + 编译器降级支持”
但:
👉 Android 生态真正的现代写法 = Kotlin + 协程
更多推荐




所有评论(0)