java的四种引用,java中引用的概念
本文给大家带来了一些关于java的知识,主要介绍了一些关于方法引用的相关问题。众所周知,方法是我们在编写代码时定义的方法。而方法引用是用来引用这个方法的。说白了,引用方法的目的是进一步优化Lambda表达式,从而减少一段更简单的代码编写。希望对大家有帮助。
如何解决写爬虫IP受阻的问题?立即使用。
什么是方法引用?
其实我们开始从字面上理解。众所周知,方法就是我们写代码时定义的方法。而方法引用是用来引用这个方法的。说白了,引用方法的目的是进一步优化Lambda表达式,从而减少一段更简单的代码编写。是啊!你没听错,Lambda表达式已经优化了,怎么优化?当相应的类、对象、super和this出现在我们的代码中时,我们可以使用方法引用,而这个方法引用的前提是我们有Lambda表达式。那么它是如何工作的呢?我们继续往下看。
方法引用符
既然题目是方法引用,那么什么是方法引用呢?方法引用是双冒号【::】,是方法引用,这也是新语法,是引用运算符的一种,通过它实现方法引用。如果一个方法的实现中已经存在Lambda要表达的函数方案,我们可以用双冒号引用该方法来代替Lambda。
如何使用方法引用?
方法参考可通过以下方式使用:
既然有上面列举的方法,那就一个一个来学吧。
通过对象名引用成员方法
例如:
定义一个成员方法,传递字符串,把字符串按照大写输出
让我们完成上述要求。
首先定义一个类。
公共类Demo02MethodRerObject {
//定义一个成员方法,传递一个字符串,输出大写的字符串。
public void printUpperCaseString(String s){
system . out . println(s . toupper case());
}
}既然是输出,我们就需要打印出来,而使用Lambdab则需要我们定义一个函数接口进行打印,在函数接口中定义一个打印字符串的抽象方法。
/*
定义打印的功能界面。
*/
@功能界面
公共接口可打印{
//定义打印字符串的抽象方法
无效打印(字符串s);
}如果通过对象名引用成员方法,如果对象名和成员方法已经存在,则可以使用对象名引用成员方法。让我们用代码来写:首先我们用Lambda来写这个需求,然后我们用方法引用来优化Lambda。
公共类Demo03ObjectMethodReference {
//定义一个方法,方法参数传递给可打印接口。
公共静态void pringString(可打印p){
p . print( abcde );
}
公共静态void main(String[] args) {
//pringString(system . out:print);
//调用printString方法。该方法的参数pringable是一个函数接口,因此可以传递Lambda。
pringString((s)-{
//创建一个MethodRerObject对象
demo 02 methodRerObject methodreobject=new demo 02 methodRerObject();
//调用Demo02MethodRerObject对象中的成员方法printUpperCaseString,输出大写的字符串。
methodreobject . printuppercasestring;
});
/*
使用方法引用优化Lambda
对象Demo02MethodRerObject已存在。
该方法也是现有的printUpperCaseString。
所以我们可以用对象名来引用成员方法。
*/
demo 02 methodRerObject methodreobject=new demo 02 methodRerObject();
pringString(methodreobject:printUpperCaseString);
}
}
通过类名引用静态方法
这次我们定义一个方法,方法的参数传递计算绝对值的整数和函数式接口Calcable。
让我们首先定义一个接口
@功能界面
公共接口电缆{
//定义一个抽象方法,传递一个整数,计算整数的绝对值并返回
int AbsCals(整数);
}按类名引用静态成员方法,前提是类已经存在,静态成员方法已经存在,可以直接按类名引用静态成员方法。同样,我们先创建类,定义方法,用Lambda写代码,然后用方法引用优化。
公共类Demo04StaticMethodReference {
//定义一个方法。该方法的参数传递用于计算绝对值的整数和函数接口Calcable。
public static int method 1(int number,Calcable c){
返回c .脓肿(数量);
}
公共静态void main(String[] args) {
//调用方法method,传递用于计算绝对值的整数和lambda表达式。
int number=method1(-10,(n)-{
//计算参数的绝对值并返回结果
返回math . ABS(n);
});
System.out.println(数字);
/*
用方法引用优化Lambdab表达式
数学课存在。
abs计算绝对值的静态方法也存在。
所以我们可以通过类名直接引用静态方法。
*/
int number2=method1(-10,Math:ABS);
system . out . println(number 2);
}
}
通过super引用成员方法
定义一个见面的方法
我们用和孩子、家长见面打招呼的方法来论证。
再次,这次我们定义我们遇到的函数接口。
/*
定义会议的功能界面。
*/
@功能界面
可欢迎的公共接口{
//定义会议方法
void greet();
}因为我们需要继承我们定义父类
/*
定义父类方法
*/
公共类Demo05Fu_Human {
//定义一个方法来说Hello
public void sayHello(){
System.out.println(Hello!我是人类。);
}
}然后定义一个子类,其中出现父类的成员方法。首先用Lambda编码,然后优化方法引用。
如果super引用父类的成员方法,如果super已经存在,父类的成员方法也存在,可以直接用super引用父类的成员方法。
import Java . nio . channels . shutdownchannelgroupe exception;
/*
定义子类
*/
公共类Demo06Zi_Man扩展Demo05Fu_Human {
//子类重写父类的sayHello方法
@覆盖
public void sayHello() {
System.out.println(Hello!我是男人。);
}
//定义一个方法,参数传递给Gerrtable接口。
公共void方法(可欢迎的g){
g . greet();
}
公共void show(){
//调用方法method。方法参数Greetable是一个函数接口,所以可以传递Lambda表达式。
方法(()-{
//创建父类的人类对象
demo 05 fu _ Human f Human=new demo 05 fu _ Human();
fhuman . say hello();
});
//因为有父子关系,所以存在一个key super,代表父类,可以直接用super调用父类的成员方法。
方法(()-{
super . say hello();
});
/*
使用超引用类的成员方法。
超级已经存在。
父类的成员方法也存在。
使用可以通过super直接引用父类成员的方法。
*/
方法(super:say hello);
}
公共静态void main(String[] args) {
//调用show方法
新Demo06Zi_Man()。show();
}
}
通过this引用成员方法
示例:
定义一个买房子的方法
同样,先定义功能接口。
/*
定义一个丰富的功能接口。
*/
@功能界面
可丰富的公共接口{
//定义一种想买什么就买什么的方式
void buy();
}然后怎么创建类,然后定义买房的方法。如果这指的是成员法,假设这个已经存在,买房的成员法也存在,那么可以直接用这个来指成员法。同样,先用Lambda写代码,再进行方法引用优化。
/*
这是指这个类的成员方法。
*/
公共课Demo07 _老公{
//定义一个买房的方式
公共void buyHouse(){
system . out . println(‘在北京二环买个四合院吧!’);
}
//定义一个marriage方法,参数传递给Richable接口。
public void marry(Richable r){
r . buy();
}
//定义一个快乐的方法
public void soHappy(){
//调用结婚的方法。该方法的参数Richable是一个函数接口,它传递Lambda表达式。
结婚(()-{
//用这个,成员方法,调用这个类的方法来买房
this . buy house();
});
/*
使用方法引用优化Lambda
这已经存在。
买房的会员方式也有。
您可以直接使用它来引用成员方法。
*/
marry(this:buy house);
}
公共静态void main(String[] args) {
新Demo07 _老公()。so happy();
}
}
类的构造器引用
定义一个Person类。
/*
人员类别
*/
公共类人员{
私有字符串名称;
公共人物(){
super();
//TODO自动生成的构造函数存根
}
公共人物(字符串名称){
super();
this.name=name
}
公共字符串getName() {
返回名称;
}
public void setName(字符串名){
this.name=name
}
}然后创建Person对象的功能接口
*
定义一个函数接口来创建一个erson对象
*/
@功能界面
公共接口人员生成器{
//定义一个方法,根据传递的名称和返回创建一个person对象
Person buliderPerson(字符串名);
}然后传递一个方法,参数传递名字和PersonBulider接口,其中Person对象是由名字创建的。类构造函数引用,假设构造方法new Person(字符串名)已知,创建的对象已知为new,可以用Person引用new来创建对象。同样,先用Lambda写代码,再进行方法引用优化。
/*
类构造函数(构造函数)引用
*/
导入Java . time . chrono . minguoreochrome;
导入javax . print . attribute . standard . printername;
公共类演示08人{
//传递一个方法,参数传递名字和PersonBulider接口,方法中名字创建Person对象。
public static void printName(字符串名称,PersonBuilder pb){
Person person=pb.buliderPerson(姓名);
system . out . println(person . getname());
}
公共静态void main(String[] args) {
//调用printName方法。该方法的参数通过函数接口。我们可以使用Lambda表达式。
打印(张三,(姓名)-{
返回新人(姓名);
});
/*使用方法引用优化Lambda表达式
方法new Person(字符串名)是已知的。
创建名为new的对象
您可以使用Person引用new来创建对象*/
PrintName(一个很疼但是不说话不笑的表面伤,Person:new);
}
}
数组的构造器引用
同样,先创建一个数组的函数接口。
/*
定义用于创建数组的功能接口。
*/
@功能界面
公共接口数组库{
//定义int类型的数组方法。参数传递数组的长度,并返回创建的int类型的数组。
int[]bulide array(int length);
}方法的参数传递创建的数组的长度和ArrayBulider接口,方法使用ArrayBuilder中的方法根据创建的长度创建数组并返回。前提,已知创建了一个int[]数组,数组的长度也已知,可以通过数组int[]引用new。同样,你应该先用Lambda写代码,然后优化方法引用。
导入Java . lang . reflect . array;
导入Java . util . arrays;
/*
数组的构造函数引用。
*/
公共类Demo09Array_BuilderArray {
/*
定义一种方法
该方法的参数传递创建的数组的长度和ArrayBulider接口
方法使用ArrayBuilder中的方法,根据创建的长度在内部创建一个数组,并返回该数组。
*/
public static int[]array length(int length,array bullider ab){
return ab.buliderArray(长度);
}
公共静态void main(String[] args) {
//调用arrayLength方法,传递数组长度和Lambda表达式
int[]arr=arrayLength(10,(len)-{
return new int[len];
});
system . out . println(arr . length);
/*使用方法引用优化Lambda表达式
已知的是int[]数组。
数组的长度也是已知的。
可以通过数组int[]引用new,创建一个数组*/
int[]arr1=arrayLength(5,int[]:new);
system . out . println(arr 1 . length);
system . out . println(arrays . tostring(arr 1));
}
}推荐学习:以上《java视频教程》是Java中深入分析方法引用的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。