java_方法引用
什么是方法引用?
个人简述方法引用:
方法引用主要是针对已经有的方法来让目前的编程更加简洁
当我们想要使用一个接口的子类的时候,子类需要重写这个接口中的抽象方法,
被重写的这个方法参数列表固定,返回值类型固定,只要将相应的代码被重写的方法即可
因此引入lambda表达式,让我们更加方便简洁的只需要写入方法中的代码即可,其他操作交给jvm来处理,但是lambda表达式需要我们写明参数(和接口中对应方法对应的参数,参数类型可以省略),来方便我们在方法体中对传入参数的使用
方法引用是lambda表达式的升级版本,针对的是当恰好有一个方法(a代表)的功能,参数,返回值和我们想要重写的方法一样,则可以直接引用a来实现,使得代码更加简洁
使用方法引用只是重构方法,并不是调用方法,
- 什么是方法引用?
当我们要编写一个lambda表达式时,发现已经有了一个(或者自己定义了一个)方法实现了我们在lambda中要实现的功能,
这时就可以引用这个已写好的方法,来代替我们的lambda表达式
- 方法引用的前提
1).基于lambda,必须可以使用lambda的时候才能判断是否可以使用方法引用
2).引用方法做的事情必须是和我们使用lambda做的事情一样
3).引用的方法的形参、返回值必须和接口中的形参和返回值一样(方法引用式不需要写形参和返回值,jvm自动判定)
被引用方法形参必须等于 、大于接口中方法的形参类型;
被引用方法的返回值类型等于、小于接口中方法的返回值类型;
- 代码简写过程:
有名字子类à匿名内部类àlambdaàlambda省略格式à方法引用
二.方法引用格式及示例
引用成员方法:
对象名::成员方法名
引用静态方法:
类名::静态方法名
构造引用(有参和无参一样,参数jvm判定)
类名::new
数组构造器引用(数组定义必须指定个数,所以在使用方法引用时,个数会通过方法的形参传入)
数据类型[]::new
图形简介:
示例代码:
package com.ahd.fangfayinyong; public class Demo01 {
public static void main(String[] args) {
//通过实现三种方法创建线程-----匿名内部类,lambda表达式,方法引用对比来说明
//匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("创建一个线程");
}
}).start(); //通过使用lambda表达式(lambda完整格式)
new Thread((()->{
System.out.println("创建一个线程");
})).start(); //通过使用lambda表达式(lambda省略格式)
new Thread((()-> System.out.println("创建一个线程"))).start(); //通过使用方法引用来实现上述功能
new Thread(System.out::println).start(); }
}
有话想要对你说
java_方法引用的更多相关文章
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- Java 8函数编程轻松入门(四)方法引用
C#中系统提供了许多IEnumerable的扩展方法.同样在Java 8中新引入了Collector类. 1.方法引用 定义: 简而言之:就是一个Lambda表达式.在Java 8中,我们我们会使用L ...
- Java笔记——Java8特性之Lambda、方法引用和Streams
Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...
- Java 8新特性-4 方法引用
对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容! Java 8的方法引用定义了四种格式: 引用静态方法 ClassName :: staticMetho ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- JAVA 8 方法引用 - Method References
什么是方法引用 简单地说,就是一个Lambda表达式.在Java 8中,我们会使用Lambda表达式创建匿名方法,但是有时候,我们的Lambda表达式可能仅仅调用一个已存在的方法,而不做任何其它事,对 ...
- [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- Swift编程语言中的方法引用
由于Apple官方的<The Swift Programming Guide>对Swift编程语言中的方法引用介绍得不多,所以这里将更深入.详细地介绍Swift中的方法引用. Swift与 ...
- 30分钟入门Java8之方法引用
30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method Referenc ...
随机推荐
- Spring Boot之WebSocket
一.项目说明 1.项目地址:https://github.com/hqzmss/test01-springboot-websocket.git 2.IDE:IntelliJ IDEA 2018.1.1 ...
- python --- 快速排序算法
在快速排序中引入递归和分治的概念(关于递归和分治的概念会单独写一篇来进行介绍) 问的解决思路: 快速排序的基本思想本身就是分治法,通过分割,将无序序列分成两部分,其中前一部分的元素值都要小于后一部分的 ...
- Java语言编程 - Java第一个程序HelloWorld
3.1 新建Java文件 首先新建一个文件夹,用于存放写的Java程序,例如我存放Java程序的位置为” D:\Files\code\java”. 在该文件夹中,右键新建一个文本文档 将文件名重命名为 ...
- .netcoreapp 发布到 linux 的问题,vs靠不住
.netcore 2.0 发布后,小版本更新速度惊人 截止目前:2.1.200 最新一个新项目,vs发布到linux@debian9一直报错,反复发布n次依然失败.把本地2.1.100更新到最新2.1 ...
- Java实现文本编辑时基于拼音输入的补全原型
续前文Java实现"命令式"简易文本编辑器原型. 效果如下: 所在源码库同上文, 尚未和上文的编辑器右侧的命令区集成. 代码由How to show autocomplete as ...
- Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 听说你的MES系统又失败了?
前些日子,一位前同事跟我抱怨,他们做的MES系统,凉凉了.这样的话,我从不同人口中听到过不止一次. 我们做的系统,做到一半做不下去了...... 我们的系统,工人都不爱用...... 不只是MES,所 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch
回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...
- 【工利其器】必会工具之(三)systrace篇(2)
systrace工具打开路径 以AndroidStudio(后面简写为AS),在顶部菜单栏中 Tools>Android>Android Device Monitor 打开后看到如下界面, ...
- 从零开始学习PYTHON3讲义(十二)画一颗心送给你
(内容需要,本讲使用了大量在线公式,如果因为转帖网站不支持公式无法显示的情况,欢迎访问原始博客.) <从零开始PYTHON3>第十二讲 上一节课我们主要讲解了数值计算和符号计算.数值计算的 ...