课时131:方法引用

简介: 课时131介绍了Java面向对象编程中的方法引用。方法引用是基于Lambda表达式的扩充,支持静态方法、实例方法、特定类型方法和构造方法的引用。通过函数式接口,方法引用可以简化代码并提高可读性。范例展示了如何引用静态方法(如`String.valueOf()`)、实例方法(如`String.toUpperCase()`)、特定类型方法(如`String.compareTo()`)和构造方法(如`Person::new`)。方法引用增强了对引用的支持功能,使代码更加简洁和灵活。

课时131:方法引用

摘要:本内容是Java面向对象编程 方法引用的介绍。

 

1.1 方法引用的概念


方法引用的操作是在Lamda的表达基础之上扩充


引用数据类型最大的特点是可以进行内存的指向处理但是在传统的开发之中一直所使用的只是对象引用操作而从JDK1.8之后也提供有方法的引用,即:不同的方法名称可以描述同一个方法

 

1.2 方法引用的形式


如果要进行方法的引用在Java里面提供有如下的四种形式:

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

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

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

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

 

1.3 方法引用形式的范例


(1)范例:引用静态方法

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

b. 方法定义:public static String valueOf(int i),该方法有参数并且还有返回值;

@FunctionalInterface   //函数式接口
// P描述的是参数、R描述的是返回值
interface IFunction<P,R>{
public R change(p p);
}
public class JavaDemo{
public static void main(string args[]){
IFunction<Integer,String>fun = String ::valueOf;
String str = fun.change(100);
System.out.println(str.length());
}
}

image.png

image.png  

利用方法引用这一概念可以为一个方法定义多个名字但是要求必须是函数式接口

 

(2)范例:引用实例化对象中的方法

a. String类里面有一个转大写的方法public String toUpperCase();

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

@FunctionalInterface   //函数式接口
// P描述的是参数、R描述的是返回值
interface IFunction<R>{
public R upper();
}
public class JavaDemo{
public static void main(string args[]){
IFunction<String>fun ="www.mldn.cn" ::toUpperCase ;
System.out.println(fun.upper());
}
}

image.png

image.png

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

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

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

 

(3)范例:引用指定类中的方法

@FunctionalInterface  //函数式接口
//P描述的是参数、R描述的是返回值
interface IFunction<P>{
public int compare(p p1,P p2);
}
public class JavaDemo{
   public static void main(string args[]){
IFunction<String>fun=String ::compareTo;
System.out.println(fun.compare("A",“a"));
}
}

image.png

image.png

在方法引用里面最具有杀伤力的就是构造方法的引用

 

(4)范例:引用构造方法

class Person{
private String name;
private int age ;
public Person (string name,int age) {
this.name =name;
this.age =age;
}
public string tostring(){
return" 姓名:"+this.name +"、年龄:"+this.age ;
}
}
@FunctionalInterface  //函数式接口
interface IFunction<R>
public R create(string s,int a);
}
public class JavaDemo {
public static void main(string args[]){
IFunction<Person>fun=Person ::new ;
System.out.println(fun.create("张三",20));
}
}

image.png

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

 

相关文章
|
JavaScript
源码学习:Vite中加载环境变量(loadEnv)的实现
源码学习:Vite中加载环境变量(loadEnv)的实现
7828 0
|
Java 数据库连接 Go
如何在Spring Boot应用中使用Nacos实现动态更新数据源
如何在Spring Boot应用中使用Nacos实现动态更新数据源
1100 0
|
负载均衡 关系型数据库 RDS
良好架构设计中的可靠性:高可用、容错、灾难恢复
良好架构设计支柱 云计算良好架构设计有五大支柱,分别是:安全性,可靠性,性能效率,成本优化和卓越操作。其中可靠性是指系统从基础设施或者服务故障当中实现恢复、以动态方式获取计算资源以满足需求,以及缓解配置错误或者暂时性网络问题等干扰因素的能力。
5324 0
|
8月前
|
Java
课时125:内部类基本概念
内部类的基本概念、使用以及优点 1.内部类的基本概念 2.内部类的基本定义与操作示例 3.内部类优点
|
XML JSON 前端开发
Ajax技术【Ajax技术详解、 Ajax 的使用、Ajax请求、 JSON详解、JACKSON 的使用 】(一)-全面详解(学习总结---从入门到深化)
Ajax技术【Ajax技术详解、 Ajax 的使用、Ajax请求、 JSON详解、JACKSON 的使用 】(一)-全面详解(学习总结---从入门到深化)
1020 1
|
8月前
|
人工智能 Java API
阿里云 0 元领取 100 万 Tokens,零门槛体验 DeepSeek-R1 满血版
阿里云开放DeepSeek-R1满血版体验,0门槛领取100万Tokens,参数规模6710亿,性能强劲且完全免费。用户可轻松写代码、做表格、写故事、逻辑推理等。重点是无需任何编程基础,学生党、职场新人皆可使用。通过注册阿里云账号、生成API Key并使用HiFox客户端,即可快速上手体验顶级AI助手的强大功能。限时福利,赶快行动!
|
存储 数据安全/隐私保护
如何选择使用字节流还是字符流
在处理文件或网络数据时,选择字节流(如InputStream/OutputStream)适合处理二进制数据,而字符流(如Reader/Writer)则适用于文本数据,能自动处理字符编码问题,确保文本正确读写。选择依据主要看数据类型及是否需要编码转换。
246 3
|
11月前
|
安全 关系型数据库 MySQL
解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题
删除 `/var/lib/mysql` 下的所有文件后,需要重新初始化数据目录,确保正确的权限设置,并重新启动 MySQL 服务。通过按照上述步骤操作,可以解决 MySQL 无法启动的问题,并恢复数据库的正常运行。初始化数据目录后,别忘了配置安全设置,并根据需要恢复备份数据。这些步骤不仅能够恢复 MySQL 的正常运行,还能确保数据库的安全性和完整性。
755 2
|
NoSQL 关系型数据库 MySQL
百万数据量优化实战
在现代互联网业务中,处理百万级别的数据量是家常便饭。传统的单体数据库架构在面对如此庞大的数据量时,往往显得力不从心。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
639 4
|
缓存 NoSQL 关系型数据库
MySQL缓存策略(一致性问题、数据同步以及缓存故障)
MySQL缓存策略(一致性问题、数据同步以及缓存故障)
376 1