技术推陈出新,现在的公司永远用不上这些新技术,程序员有必要学吗?非常有必要,现在的公司用不上,下一个公司或许用的上。
——大龙不聋
目录
2.2.2 语法格式二:Lambda需要一个形参,没有返回值
2.2.3 语法格式三:因为“类型推断”,形参列表的数据类型可以省略
2.2.4 语法格式四:Lambda只有一个参数时,参数的小括号可以省略
2.2.5 语法格式五:Lambda需要两个或以上的参数,多条语句,有返回值,可以省略参数类型
前言
想学JDK8新特性,看这一篇就足够了,通过本章节,你将学会以下知识:
- 了解Java发行版本
- LTS是特么什么鬼
- Oracle JDK 和 Open JDK的区别,怎么选JDK
- Lambda表达式
- 函数式接口
- Stream API
- Optional类
- 新的时间和日期API
- ...
跟我学Java,我保证大家可以包学包会,管死管埋,那么让我们开始新章节的学习吧。
一、JDK发行版本
Java作为常青语言,叱咤软件界已有28年,大浪淘沙,风雨无阻,可见Java有多么牛逼啦!下图是TIOBE 2024年3月份排名,Java仍然名列前茅!
1、Java发行版本
那么,Java为什么这么牛?一个重要原因是,它是一门开源的高级编程语言,它背后有庞大的社区支持,所以了解一下JDK的发行版本,以及每个版本的新特性也非常重要,没准,这个新特性能够一下击中你的心巴。
发行版本 | 发行时间 | 备注 |
---|---|---|
Java 1.0 | 1996.01.23 | Sun公司发布Java的第一个开发工具包 |
Java 5.0 | 2004.09.30 | Java 5.0是一个里程碑版本,它有许多重大改变,(1)版本号从1.4更新至5.0;(2)Java分为JavaSE、JavaEE、JavaME三个平台 |
Java 6.0 | 2006.11.13 | 在Java 5.0的基础上,做了增强 |
Java 7.0 | 2011.07.28 | 做了重大改进,"更具进化性而非革命性",是第一个长期支持版本(LTS) |
Java 8.0 | 2014.03.18 | 继Java 5.0之后变化最大的版本,速度更快,代码更少,是第二个长期支持版本(LTS) |
Java 9.0 | 2017.09.22 | 在此版本开始,Oracle每半年更新一次 |
Java 10.0 | 2018.03.21 | |
Java 11.0 | 2018.09.25 | JDK安装包取消独立JRE安装包,是长期支持版本(LTS) |
Java 12.0 | 2019.03.19 | |
Java 13.0 | 2019.09.17 | |
Java 14.0 | 2020.03.17 | |
Java 15.0 | 2020.09.15 | |
Java 16.0 | 2021.03.16 | |
Java 17.0 | 2021.09.14 | 是长期支持版本(LTS) |
Java 18.0 | 2022.03.22 | |
Java 19.0 | 2022.10.17 | |
Java 20.0 | 2023.03.21 | |
Java 21.0 | 2023.09.19 | 是长期支持版本(LTS) |
Java 22.0 | 2024.03.19 |
注意,上面Java的发行版本,也就是JDK的发行版本(Java 1.0 = JDK 1.0 ... ),这些用记吗?当然不用了,我自己都记不住,小伙伴们主要记忆长期支持版本(long-term support release,简称LTS)有哪些就可以啦。
那么,什么是LTS?
LTS表示长期支持的版本,Oralce官方提供对JDK的个别版本长期支持,直到版本维护期结束,如果出现了bug(错误),官方会发布安全补丁,非长期支持的版本不会再发布补丁,任其自生自灭。所以,大家会默默地选用一个LTS版本,为了稳定嘛!
版本 | 开始日期 | 结束日期 | 延期结束日期 |
---|---|---|---|
JDK 7 (LTS) | 2011.07 | 2019.07 | 2022.07 |
JDK 8 (LTS) | 2014.03 | 2022.03 | 2030.12 |
JDK 11 (LTS) | 2018.09 | 2023.09 | 2026.09 |
JDK 17(LTS) | 2021.09 | 2026.09 | 2029.09 |
JDK 21 (LTS) | 2023.09 | 2028.09 | 2031.09 |
所以,现在选用的LTS版本主要是JDK 8、JDK 11、JDK17。目前JDK 8的市场占有量最高,但Spring boot 3.0发布后,官方要求最低使用JDK17,所以JDK17的市场占有量势必增长,之所以不推荐JDK21,是因为我们做技术的,一般推荐使用上一个稳定版本,避免新版本的不稳定性。
2、各版本新特性介绍
篇幅有限,各个版本的新特性将放在最后一节讲述。
3、Oracle JDK和Open JDK的区别
现在有Oracle推出的JDK 和 OpenJDK社区推出的JDK,我们应该怎么选择呢?
让我们一起看一下吧!
Items | Oracle JDK | Open JDK |
---|---|---|
来源 | Oracle 团队维护 | OpenJDK社区维护 |
协议 | NFTC协议(免费)/OTN协议(收费) | GPL v2许可协议 |
关系 | 基于OpenJDK构建的Oracle JDK,增加一些商业特性。但从Java 11开始,Oracle JDK和Open JDK开始融合。 |
|
是否商用 | Java 17、Java 21商用免费使用三年,之后需要付费订阅。 Java 8 (8u211) 至 Java 16商业收费。 Java 8 (8u211) 之前的低版本商用免费。 个人用户免费、开发用户免费。 |
2017年9月,所有版本免费 |
语法支持 | 一样 | 一样 |
下游衍生版 |
|
Oracle JDK 和 Open JDK我们应该怎么选?对于我们个人开发与学习没区别,主要看公司的要求,比如我们公司就要求用Oracle JDK,那就听话,反正不用自己花钱。
4、JDK各版本下载
4.1 Oracle JDK下载地址
Oracle JDK 各版本下载https://www.oracle.com/java/technologies/downloads/archive/
4.2 Open JDK 下载地址
Open JDK各版本下载https://jdk.java.net/22/
二、JDK8的新特性
1、JDK8新特性思维导图
Java 8 有许多重大改变,速度更快,代码更少。而且增加许多新特性,这里重点讲解常用的特性,如Lambada表达式、函数式编程、方法引用、构造器引用、Stream API等,其他特性将不作为重点介绍。
2、Lambda表达式
2.1 初识Lambda表达式
为了更好的理解Lambda表达式,我们短暂跳出Java的藩篱,从计算机科学角度了解它,Lamdba表达式是一种特殊函数,它可以作为参数传递给其他函数或者作为返回值返回,是函数式编程语言中非常重要的一个特点。
Java正是借鉴这种函数式编程的思想,引入Lambda表达式,成为Java 8重要的新特性。
Java 8中,Lambda表达式是一个匿名函数,允许将一个函数作为另外一个函数的参数,我们可以把Lambda表达式理解为一段可以传递的代码。Lambda语法将代码像数据一样传递出去,可以代替大部分匿名内部类,使用它写代码更简洁、更灵活、更有逼格。
说了这么多,我们举一个简单的例子。
package com.dalong01.lambda;
import org.junit.Test;
public class LambdaTest {
// 匿名内部类
@Test
public void test() {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("跟大龙学Java");
}
});
t1.start(); // 输出结果:跟大龙学Java
}
// 用Lambda表达式替代匿名内部类
@Test
public void test2() {
Thread t1 = new Thread(() -> System.out.println("跟大龙学Java"));
t1.start(); // 输出结果:跟大龙学Java
}
}
感觉怎么样,看上面的例子,是不是用Lambda表达式编写代码更快,逼格更高。
那么,接下来让我们深入浅出的学习Lambda表达式吧!
2.2 语法格式
Lambda表达式的语法格式是:(形参列表) -> {Lambda体},其中
- “->” 表示:Lambda操作符或箭头操作符;
- “(形参列表)” 表示:Lambda形