| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 学习笔记(java)②②(Lambda表达式,接口组成更新,方法引用) -> 正文阅读 |
|
[Java知识库]学习笔记(java)②②(Lambda表达式,接口组成更新,方法引用) |
1. Lambda表达式函数式编程思想概述 在数学中,函数就是有输入量,输出量的一套计算方案,也就是"拿数据做操作" 面向对象思想强调"必须通过对象的形式来做事情" 函数式思想则尽量忽略面向对象的复杂语句:"强调做什么,而不是以什么形式去做" 而Lambda表达式就是函数式思想的体现 Lambda表达式的标准格式 匿名内部类中重写run()方法的代码分析
①方法形式参数为空,说明调用方法时不需要传递参数 ②方法返回值类型为void,说明方法执行没有结果返回 ③方法体中的内容,是我们具体要做的事情 Lambda表达式的代码分析
( ):里面没有内容,可以看成是方法形式参数为空 ->:用箭头指向后面要做的事情 { }:包含一段代码,我们称之为代码块,可以看成是方法体中的内容 组成Lambda表达式的三要素:形式参数,箭头,代码块 Lambda表达式的标准格式 Lambda表达式的格式 格式:(形式参数) ->{代码块} 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可 ->:由英文中画线和大于符号组成,固定写法。代表指向动作 代码块:是我们具体要做的事情,也就是以前写的方法体内容 Lambda表达式的使用前提 ①有一个接口 ②接口中有且仅有一个抽象方法 Lambda表达式的省略模式 省略规则: ①参数类型可以省略。但是有多个参数的情况下,不能只省略一个 ②如果参数有且仅有一个,那么小括号可以省略 ③如果代码块的语句只有一条,可以省略大括号和分号,甚至是return Lambda表达式的注意事项 注意事项: ①使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法 ②必须有上下文环境,才能推导出Lambda对应的接口 根据局部变量的赋值得知Lambda对应的接口:Runnable r = () ->System.out.println("Lambda表达式"); 根据调用方法的参数得知Lambda对应的接口:new Thread(() ->System.out.println("Lambda表达式")).start(); Lambda表达式和匿名内部类的区别 所需类型不同 ①匿名内部类:可以是接口,也可以是抽象类,还可以是具体类 ②Lambda表达式:只能是接口 使用限制不同 ①如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类 ②如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式 实现原理不同 ①匿名内部类:编译之后,产生一个单独的.class字节码文件 ②Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成 2.接口组成更新接口组成更新概述 接口的组成 ①常量
②抽象方法
③默认方法(Java8) ④静态方法(Java8) ⑤私有方法(Java9) 接口中默认方法 接口默认方法的定义格式 格式:
范例:
接口中默认方法的注意事项: ①默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字 ②public可以省略,default不能省略 接口中静态方法 接口中静态方法的定义格式: 格式:
范例:
接口中静态方法的注意事项: ①静态方法只能通过接口名调用,不能通过实现类名或者对象名调用 ②public可以省略,static不能省略 接口中私有方法 Java9中新增了带方法体的私有方法,这其实在Java8中就埋下了伏笔:Java8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含同一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是Java9增加私有方法的必然性 接口中私有方法的定义格式 格式1:
范例1:
格式2:
范例2:
接口中私有方法的注意事项: ①默认方法可以调用私有的静态方法和非静态方法 ②静态方法只能调用私有的静态方法 3.方法引用方法引用符 ::该符号为引用运算符,而它所在的表达式被称为方法引用 Lambda表达式:
分析:拿到参数s之后通过Lambda表达式,传递给System.out.println方法去处理 方法引用:
分析:直接使用System.out中的println方法来取代Lambda,代码更加的简洁 推导与省略 ①如果使用Lambda,那么根据"可推导就是可省略"的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导 ②如果使用方法引用,也是同样可以根据上下文进行推导 ③方法引用是Lambda的孪生兄弟 Lambda表达式支持的方法引用 常见的引用方式: 引用类方法 引用对象的实例方法 引用类的实例方法 引用构造器 引用类方法 引用类方法,其实就是引用类的静态方法 格式:
范例:
Integer类的方法:
将此String转换为int类型数据 Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数 引用对象的实例方法 引用对象的实例方法,其实就是引用类中的成员方法 格式:
范例:
String类中的方法:
将此String所有字符都转换为大写 Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数 引用类的实例方法 引用类的实例方法,其实就是引用类中的成员方法 格式;
范例:
String类中的方法:
从beginIndex开始到endIndex结束,截取字符串。返回一个子串,字串的长度为endIndex-beginIndex Lambda表达式被类的实例方法替代的时候 ①第一个参数作为调用者 ②后面的参数全部传递给该方法作为参数 引用构造器 引用构造器,其实就是引用构造方法 格式:
范例:
Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:31:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |