2017年8月起,JCP执行委员将Java的发布频率改为每六个月一次,且每三年一个大的稳定版本。
此后,Java一直遵循这个频率发布新版本,如今Java15已悄然问世。
虽然大多数的开发者和企业仍在使用Java8,但是关注和学习Java的新特性是很有必要的。
鱼皮为大家整理了Java8及以后各版本的Java特性,让大家先有个印象,可以进一步通过搜索引擎进行学习。
Java版本进化
2014年3月18日
Java 8
Java 8是Java语言开发的一个主要版本,目前国内大部分公司都在使用该版本进行Java开发。
Java 8 新特性:
1. Lambda 表达式和函数式编程
2. 方法引用
3. 接口默认方法
4. 新的编译工具,如Nashorn引擎jjs、类依赖分析器jdeps
5. 新的Nashorn Javascript引擎,允许我们在JVM上运行特定的Javascript应用。
6. 流式处理Stream API,提供了方便操作流式数据的能力
7. 新的日期时间处理 Date Time API
8. Optional 可选类,有效解决空指针异常
官方介绍:https://www.oracle.com/java/technologies/javase/8-whats-new.html
2017年9月22日
Java 9
Java 9最大的新特性是引入模块化系统,由于不是稳定版本,不建议使用Java 9。
Java 9 新特性:
1. 模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统。
2. REPL (JShell):交互式编程环境。
3. HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。
4. 改进的 Javadoc:Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。
5. 多版本兼容 JAR 包:多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。
6. 集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。
7. 私有接口方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法。
8. 进程 API: 改进的 API 来控制和管理操作系统进程。引进 java.lang.ProcessHandle 及其嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。
9. 改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。
10. 改进 try-with-resources:如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。
11. 改进的弃用注解 @Deprecated:注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏。
12. 改进钻石操作符(Diamond Operator) :匿名类可以使用钻石操作符(Diamond Operator)。
13. 改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream。
14. 多分辨率图像 API:定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了。
15. 改进的 CompletableFuture API :CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作。
轻量级的 JSON API:内置了一个轻量级的JSON API
16. 响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程。
官方介绍:https://www.oracle.com/java/technologies/javase/9-relnote-issues.html
2018年3月20日
Java 10
Java 10最大的新特性是局部变量的类型推断,由于不是稳定版本,不建议使用Java 10。
Java 10 新特性:
1. 局部变量的类型推断 var关键字
2. GC改进和内存管理 并行全垃圾回收器 G1
3. 新的垃圾回收器接口
4. 线程-局部变量管控
5. 合并 JDK 多个代码仓库到一个单独的储存库中
6. 新增API:ByteArrayOutputStream
7. 新增API:List、Map、Set
8. 新增API:java.util.Properties
9. 新增API:Collectors收集器
官方介绍:https://www.oracle.com/java/technologies/javase/10-relnote-issues.html
2018年9月25日
Java 11
Java 11是Java 8之后第一个长期支持的稳定版本,也完全取代了Java 9和Java 10,追求新特性的同学来说,可以使用Java 11进行开发。
Java 11 新特性:
1. 本地变量类型推断,var关键字
2. 字符串处理方法增强
3. 集合类方法增强
4. 流式处理 Stream API 增强
5. Optional 可选类增强
6. InputStream 输入流增强
7. 更方便的 HTTP Client API
8. java命令增强,一个命令编译运行源代码
9. ZGC:可扩展的低延迟垃圾收集器
10. Epsilon:仅处理内存分配而不实施任何实际的内存回收机制的垃圾收集器
11. 移除Java EE和CORBA模块
官方介绍:https://www.oracle.com/java/technologies/javase/jdk-11-relnote.html
2019年3月19日
Java 12
Java 12的新特性并不多,不建议使用这个版本。
Java 12 新特性:
1. Switch表达式增强
2. 默认CDS归档:通过在64位平台上的默认类列表的帮助下生成CDS归档来改进JDK构建过程
3. Shenandoah GC:Shenandoah是一种垃圾收集算法,旨在保证低延迟(实验性功能)
4. JMH 基准测试:简化了现有微基准测试的运行和新基准测试的创建过程
5. JVM 常量 API
6. G1的可中断 Mixed GC:通过将Mixed GC集拆分为强制部分和可选部分,使G1垃圾收集器更有效地中止垃圾收集过程
7. 改进G1垃圾收集器,归还不使用的堆内存给操作系统
8. 移除多余ARM64实现:消除了JDK11中维护两个64位ARM实现的重复工作
官方介绍:https://www.oracle.com/java/technologies/javase/12-relnote-issues.html
2019年9月17日
Java 13
Java 13的新特性不多,ZGC增强是一大亮点,也不建议使用该版本。
Java 13 新特性:
1. 动态应用程序类数据共享(CDS):允许在 Java 应用程序执行结束时动态进行类归档
2. 增强 ZGC:如释放未使用内存,最大堆大小为 16TB,添加限制堆大小参数等
3. Socket API 重构
4. Switch 表达式增强(预览功能):如 yield 语句
5. 文本块(预览功能):提供更清晰的多行字符串写法
官方介绍:https://www.oracle.com/java/technologies/javase/13-relnote-issues.html
2020年3月17日
Java 14
Java 14发布了很多新特性,比如其他语言中提供的instanceof模式匹配,Record记录,文本块特性再次发布预览版等等,由于不是稳定版,不建议在生产环境使用。
Java 14 新特性:
1. instanceof的模式匹配 (预览)
2. 打包工具 (Incubator)
3. G1的NUMA内存分配优化
4. JFR事件流
5. 非原子性的字节缓冲区映射
6. 友好的空指针异常
7. Records 记录(预览):更轻量的不可变类
8. Switch表达式增强 (标准)
9. 弃用Solaris和SPARC端口
10. 移除CMS(Concurrent Mark Sweep)垃圾收集器
11. 支持MacOS系统上的ZGC
12. 支持Windows系统上的ZGC
13. 弃用ParallelScavenge + SerialOld GC组合
14. 移除Pack200 Tools和API
15. 文本块 (第二个预览版)
16. 外部存储器API (Incubator)
官方介绍:https://www.oracle.com/java/technologies/javase/14-relnote-issues.html
2020年9月15日
Java 15
当前最新的Java版本,也不建议直接在生产环境使用。
Java 15 新特性:
1. RMI Activation(远程调用激活)被标记为Deprecate
2. Hidden Classes:不能直接被其他class的二净值代码使用的class
3. EdDSA椭圆曲线签名算法
4. instanceof模式匹配 (二次预览)
5. Records (二次预览)
6. Sealed Classes (预览):只允许被指定的类或接口实现
7. 文本块
官方介绍:https://www.oracle.com/java/technologies/javase/15-relnote-issues.html
以上就是Java各版本的新特性啦,可以挑选自己感兴趣的特性进行学习,一起期待下一个稳定版本Java 17吧!
大家有什么希望Java 17添加的新特性呢?评论区告诉鱼皮吧~