求职之路 | 2024年Java从入门到干活:第18章JDK8-JDK21新特性(一)——Lambda表达式

本文详细介绍了Java 8中的新特性——Lambda表达式,包括其概念、语法格式、应用场景及与函数式接口的关系。通过学习,读者将了解Lambda表达式的各种形式,如无参无返回值、有参无返回值、类型推断、参数省略等,以及如何使用Lambda表达式简化代码。此外,文章还提及了函数式接口的重要性,并给出了相关练习题,帮助读者巩固理解。
摘要由CSDN通过智能技术生成

技术推陈出新,现在的公司永远用不上这些新技术,程序员有必要学吗?非常有必要,现在的公司用不上,下一个公司或许用的上。

——大龙不聋

目录

前言

一、JDK发行版本

1、Java发行版本

2、各版本新特性介绍

3、Oracle JDK和Open JDK的区别

4、JDK各版本下载

4.1 Oracle JDK下载地址

 4.2 Open JDK 下载地址

二、JDK8的新特性

1、JDK8新特性思维导图

2、Lambda表达式

2.1 初识Lambda表达式

2.2 语法格式

2.2.1 语法格式一:无参,无返回值

2.2.2 语法格式二:Lambda需要一个形参,没有返回值

2.2.3 语法格式三:因为“类型推断”,形参列表的数据类型可以省略

2.2.4 语法格式四:Lambda只有一个参数时,参数的小括号可以省略

2.2.5 语法格式五:Lambda需要两个或以上的参数,多条语句,有返回值,可以省略参数类型

2.3 练习题

3、函数式接口

3.1 什么是函数式接口

3.2 Java内置函数式接口

3.2.1 以前用过的函数式接口

3.2.2 四大核心函数式接口

3.2.3 其它接口

4、方法引用和构造器引用

4.1 方法引用

4.2 方法引用语法格式

4.2.1 语法格式一:对象 :: 实例方法

4.2.2 语法格式二:类 :: 静态方法

4.2.3 语法格式三:类 :: 实例方法

4.3 构造器引用

4.4 数组引用


前言

想学JDK8新特性,看这一篇就足够了,通过本章节,你将学会以下知识:

  • 了解Java发行版本
  • LTS是特么什么鬼
  • Oracle JDK 和 Open JDK的区别,怎么选JDK
  • Lambda表达式
  • 函数式接口
  • Stream API
  • Optional类
  • 新的时间和日期API
  • ...

 跟我学Java,我保证大家可以包学包会,管死管埋,那么让我们开始新章节的学习吧。

一、JDK发行版本

Java作为常青语言,叱咤软件界已有28年,大浪淘沙,风雨无阻,可见Java有多么牛逼啦!下图是TIOBE 2024年3月份排名,Java仍然名列前茅!

2024年3月 TIOBE 排名
2024年3月 TIOBE 排名

1、Java发行版本

那么,Java为什么这么牛?一个重要原因是,它是一门开源的高级编程语言,它背后有庞大的社区支持,所以了解一下JDK的发行版本,以及每个版本的新特性也非常重要,没准,这个新特性能够一下击中你的心巴。

Java发行版本
发行版本 发行时间 备注
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版本,为了稳定嘛!

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,我们应该怎么选择呢?

让我们一起看一下吧!

Oracle JDK和Open 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月,所有版本免费
语法支持 一样 一样
下游衍生版
  • Alibaba Dragonwell JDK
  • 腾讯 Kona JDK
  • 华为 毕昇 JDK
  • Amazon Corretto JDK
  • Red Hat build OpenJDK 8 和 OpenJDK 11
  • Azul Zulu JDK
  • LiBERICA JDK
  • SapMachine JDK
  • OpenLogic OpenJDK

Oracle JDK 和 Open JDK我们应该怎么选?对于我们个人开发与学习没区别,主要看公司的要求,比如我们公司就要求用Oracle JDK,那就听话,反正不用自己花钱。

4、JDK各版本下载

4.1 Oracle JDK下载地址

Oracle JDK 各版本下载icon-default.png?t=N7T8https://www.oracle.com/java/technologies/downloads/archive/

Oracle JDK各版本下载

 4.2 Open JDK 下载地址

Open JDK各版本下载icon-default.png?t=N7T8https://jdk.java.net/22/

Open JDK 各版本下载

二、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形
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值