java的四种引用,java中引用的概念

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: