JDK官方说本月会发布JDK24的正式版本,以 JEP(Java 增强提案)形式呈现的最终 24 项新特性。大家听了不用发愁,我跟大家一样,24个特性一个也没记住。
这是一个非长期支持版本,日后的维护是个问题,所以一般公司也不会在生产环境使用。咱们今天要说的是JDK8到最后一个长期支持版本JDK21都有哪些平时用的多的。
首先从JDK8开始,长期支持的稳定版本有:JDK11、JDK17和JDJ21。其中,JDK11是最后一个免费版本。具体来说:
- JDK 8:从8u201/202版本开始商用收费,之前的版本免费。
- JDK 11:从11.0.3版本开始商用收费,之前的版本免费。
JDK 12及以上版本:全版本商用收费。
JDK8
Lambda表达式和Stream API
Lambda表达式的引入是JDK 8中最为显著的变化之一,它允许开发者以更加简洁的方式编写匿名内部类,从而使得代码更加紧凑且易于理解。Lambda表达式配合Stream API使用,可以轻松实现对集合(如List, Set等)的数据处理操作,比如过滤(filter)、映射(map)和归约(reduce),大大简化了数据处理逻辑的编码工作。
新的时间日期API (java.time)
JDK 8之前,Java的时间日期处理一直被批评为复杂且容易出错。为了解决这些问题,JDK 8引入了一套全新的时间日期API——java.time
包。这套API设计得更为直观合理,提供了丰富的类库支持,包括表示日期(LocalDate)、时间(LocalTime)、日期时间(ZonedDateTime)等,以及用于处理不同时区的ZoneId和ZoneOffset类。此外,它还增强了日期和时间的解析与格式化功能,并有效解决了旧版日期时间API中存在的线程安全问题。
默认方法的接口改进
在JDK 8以前,Java中的接口只能包含抽象方法,这限制了接口的发展和演进。为了向后兼容并增加灵活性,JDK 8允许在接口中定义默认方法(default method)。这意味着接口现在可以直接提供方法的具体实现,而无需强制其实现类重写这些方法。这一变化使得接口能够随着Java版本的升级而进化,同时保持与现有实现类的兼容性,极大地方便了框架和库的设计者进行功能扩展。
二、JDK 9至JDK 17的新特性概览
从JDK 9到JDK 17,Java经历了一系列激动人心的更新和改进。这些版本不仅增强了语言本身的功能,还对开发者体验进行了优化,下面将分别介绍每个版本的核心更新摘要,并重点讨论长期支持(LTS)版本。
1. JDK 9
模块化系统(Jigsaw项目): 引入了Java平台模块系统,允许定义清晰的边界来封装代码,提高安全性与维护性。
JShell工具: 提供了一个交互式的环境用于快速测试Java代码片段。
其他改进: 支持私有接口方法、增强的Stream API等。
2. JDK 10
局部变量类型推断: 使用
var
关键字简化变量声明时的类型标注,提升编码效率。应用类数据共享(CDS): 提高了JVM启动速度并减少了内存占用。
3. JDK 11 (LTS)
长期支持: 是继JDK 8之后的第一个LTS版本,为需要稳定性和长期支持的企业提供服务。
HTTP客户端API: 标准化了异步非阻塞HTTP请求处理,取代了过时的HttpURLConnection。
移除特性: 去除了Java EE和CORBA模块,使核心平台更加精简。
4. JDK 12 - JDK 16 这些版本主要集中在语言特性的改进、性能优化以及开发人员生产力的提升上。例如,引入了switch表达式(后在JDK 14中成为标准),增强了垃圾回收机制,提供了更多诊断和监控工具等。
5. JDK 17 (LTS)
最新LTS版本: JDK 17标志着一个新的稳定点,适用于寻求长期稳定性解决方案的企业用户。
密封类(Sealed Classes): 允许更精确地控制哪些类可以扩展或实现某个类或接口,增强了安全性和可维护性。
模式匹配(for instanceof): 进一步简化了类型检查后的类型转换操作。
弃用和删除: 移除了某些不再推荐使用的API,确保平台的清洁和发展方向。
业界目前普遍使用的版本是JDK8和11。主要原因一方面是收费,一方面新版本特性也不是特别吸引人。再加上Java项目稳定性是关键,没有必要花着时间成本和升级后的稳定性风险去升级。一句话:够用就行。