你不知道的Java新特性:lambda与方法引用

简介: PS:最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,我连日加班好多天,终于整理好了,16000+ 道,295多份,多份面试题大全,我会持续更新中,马上就会整理更多!【文末有领取方式】哈喽,大家好,我是指北君。虽然目前Java最新版本都已经到16了,但是绝大部分公司目前用的Java版本都是8,想当初Java8问世后,其Lambda表达式与方法引用可是最亮眼的新特性,目前,这两个特性也被大家广泛使用,所以今天指北君就带大家看看这两个特性

1.Lambda

从JDK1.8开始为了简化使用者进行代码开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式编程比较著名的语言:haskell,Scala,利用函数式的编程可以避免掉面向对象编程之中的一些繁琐的问题。面向对象在其长期发展的过程中一直有一部分的反对者认为面向对象过于繁琐

比如:

1.png

2.png

上面语句的核心功能只有一行核心语句,但是为了这一行核心语句依然需要按照完整的面向对象给出的设计结构进行开发。所以Lambda出现啦。


3.png

简单吧,这种形式就避免了复杂的面向对象结构化的要求。

Lambda表达式如果要想使用,那么必须有一个重要的实现要求:SAM(Single Abstract Method)只有一个抽象方法(但可以有default和static方法),以IMessage接口为例,在这个接口里面发现只是提供有一个send()方法,除此之外没有任何其他方法定义,所以这样的接口就被称为函数式接口,而只有函数式接口才可以被Lambda表达式所使用

jdk1.8之后可以在接口里面定义static方法和default方法也是为了函数式编程而设置的,如下面这个是允许的

4.png

对于Lambda表达式而言,提供了如下几种格式

1) 方法没有参数:()-->{ };

2) 方法有参数:(参数,参数)-->{ };

  1. 如果现在只有一行语句返回:(参数,参数)-->语句;

我们看下第三种


5.png

利用Lambda表达式可以使代码更加简便

其中一个很经典的应用就是多线程Runnable接口的例子

6.png


2.方法引用


引用数据类型最大的特点是可以进行内存的指向处理,但是在传统的开发之中一直所使用的只是对象引用操作,而jdk1.8以后也提供有方法的引用,即:不同的方法名称可以描述同一个方法(即可以为一个方法定义多个名字,但是要求必须是函数式接口)。如果要进行方法的引用在java里面提供了如下的四种形式

1)引用静态方法:类名称 :: static方法名称;

2)引用某个实例对象的方法:实例化对象 :: 普通方法;

3)引用特定类型的方法:特定类 :: 普通方法;

4)引用构造方法:类名称 :: new ;

2.1 引用静态方法

在String类里面提供有String.valueOf( )方法,这个方法就属于静态方法。

方法范例:public static String valueOf(int i),该方法有参数还有返回值


7.png


输出结果为:3

2.2 引用某个实例对象的方法

String类里面有个转大写的方法:public String toUpperCase( )

这个方法是必须在有实例化对象提供的情况下才可以调用

8.png


输出结果为:hahaha

2.3 引用特定类型的方法

在方法引用时也可以引用特定类中的一些操作方法,在String里面提供有一个字符串大小关系的比较

比较大小:public int compareTo(String anotherString)

这是一个普通方法,如果要引用普通方法,则往往都需要实例化对象,但是如果说现在你不想给出实例化对象,只是想引用这个方法,则就可以使用特定类来进行引用处理。


9.png


输出结果为:-34

2.4 引用构造方法

10.png


输出结果:姓名:张三、年级:20

提供方法引用的概念更多情况下也只是弥补了对于引用的支持功能。

3 小结

本文介绍了Java8的新特性,lambda和方法引用,其为我们编程带来了便利,所以我们应该需要掌握它。

我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

面试大全包括:包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!

领取方式:扫描下方公众号【Java技术指北】回复【面试大全】即可获取



                             11.jpg

相关文章
|
14天前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
16天前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
17天前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
28 4
|
18天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
67 4
|
21天前
|
Java API 开发者
Java中的Lambda表达式与函数式编程####
在Java的演变过程中,Lambda表达式和函数式编程的引入无疑是一次重大的飞跃。本文将深入探讨Lambda表达式的定义、用法及优势,并结合实例说明如何在Java中利用Lambda表达式进行函数式编程。通过对比传统编程方式,揭示Lambda表达式如何简化代码、提高开发效率和可维护性。 ####
|
23天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
64 2
|
24天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
Java
JAVA方法的定义
JAVA方法的定义
88 0
|
5月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
42 1
|
6月前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
72 1
下一篇
无影云桌面