首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带你彻底掌握 Java 方法引用

这其实就是一种方法引用。中间的两个冒号“::”,就是 Java 语言中方法引用的特有标志,出现它,就说明使用到了方法引用。...这也是方法引用的精髓: 只要一个已存在的方法,其入参类型、入参个数和函数式接口的抽象方法相同(不考虑两者的返回值),就可以使用该方法(如本例的 println(xxx)),来指代函数式接口的抽象方法(...有了方法引用,就可以大大减轻这种不必要的形式化。因为 Animal 类已经有了类似的比较方法,即静态方法 compareByName()。...在前一章节的第五种方式,我们可以替换为类特定对象的引用。...所以也可以使用在方法引用。 怎么使用呢?

65110

Java 方法引用_特性

JAVA8 方法引用:(四种方法引用的使用)   对象引用的特点:不同的对象可以操作同一块的内容;而方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字。...引用静态方法:   类名称 :: static 方法名称 引用某个对象的方法:   实例化对象 :: 普通方法 引用特定类型的方法:   特定类 :: 普通方法 引用构造方法:   类名称 :: new.../** * 实现方法引用接口 * @param 引用方法参数的类型 * @param 引用方法返回的类型 */ interface IMessage { public...// 本代码,将toUpperCase()函数的应用交给了IMessage接口的upper方法 IMessage msg = "Hello" ::...Book类的构造方法 // 调用的create实际上是调用的Book.Book()构造方法 Book book = msg.create("Java Fail",12.2

63620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java8 方法引用

    关于lambda表达式可以看这篇文章Java8 Lambda表达式 当lambda表达式只是执行一个方法调用时, 直接通过方法引用的形式调用. 方法引用是一种更简洁的lambda表达式....可以看出来, 方法引用就是用已经实现的方法来实现lambda表达式的实现, 所以引用方法要满足以下要求: 引用方法的参数列表必须与实现的抽象方法参数列表保持一致....方法引用的语法为: 类或对象名::方法名或new 通过引用即可引用指定类或对象的指定方法 分类 下面介绍以下几种不同的方法引用. 1.静态方法引用 顾名思义, 静态方法引用就是引用类的静态方法, 语法为...2.实例方法引用 顾名思义,实例方法引用就是引用对象实例的方法, 语法为: 对象实例::方法方法引用与lambda表达式: String str = "aaaaaaaaaaa"; // 若实例方法要通过对象来调用...3.构造方法引用 顾名思义, 构造方法引用就是引用类的构造方法, 语法为: 类名::new 方法引用与lambda表达式: // 会根据参数寻找合适的构造方法 String::new 等价于lambda

    50820

    Java引用

    package com.wust.java; /** * 首先要理解 ,在Java对象的访问是使用指针的形式来实现的 * 该指针就是一个保存了对象的存储地址的变量...,是对象在存储空间中的起始地址 * 在Java是使用对象的引用 来表示 指针这种数据类型 * 在Java new 操作符的作用实际上是为对象开辟足够的内存空间 * 换句话说,只要使用了new...,就一定是生存了新的存储地址变量,也就是产生了一个指针,一定有引用指向了这个指针 */ public class RefrenceTest { public static class People...System.out.println(p1.getName());//输出结果应该是B System.out.println(p1.hashCode());//hashCode()方法返回的就是对象存储的物理地址...(p1 == p2); System.out.println(p1.hashCode());//hashCode()方法返回的就是对象存储的物理地址,实际有可能不是 System.out.println

    1.3K10

    Java引用、软引用、虚引用、强引用、 Finalizer引用

    Java层面,一共有四种引用:强引用、软引用、弱引用、虚引用,这几种引用的生命周期由强到弱。转换关系大致如下图所示: ?...,在垃圾回收器线程扫描它所管辖的内存区域的过程,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存 System.gc(); // 软引用的对象在内存充足的情况下不会回收...在我们的系统里无法被构造(类被定义成package final 类型),Finalizer的实例是一个双向链表的结构,内部有prev与next指针,提供了add与remove方法将对象增加到链表与从链表删除对象...在构造方法里,会调用add方法,将Finalizer对象加入到链表里,代码如下: ? ?...,我们分析dump内存的时候,经常能看到 java.lang.ref.Finalizer占用的内存大小远远排在前面,就是因为系统里构造了大量的实现了finalize方法的对象。

    2.1K30

    Java学习】方法引用

    所属专栏:Java学习 1. 方法引用 方法引用:把已经存在的方法拿来使用,当作函数式接口中抽象方法方法体 " :: "是方法引用方法引用时需要注意: 1....方法引用的分类 2.1 引用静态方法 格式: 类 :: 方法名 需求:获取集合的数字部分 如果说使用之前的方法来解决,就是再定义一个集合,在循环中调用parseInt()方法,再把结果添加到新集合...这里在另一个类定义了一个专门进行字符串判断的方法,并且参数类型和返回值都和用到的抽象方法一致,这时就可以使用方法引用了 2.3 引用构造方法 格式:类名 :: new 需求:把集合的字符串封装成...对于抽象方法的形参:第一个参数表示被引用方法的调用者,决定了可以引用哪些类方法,在Stream流,第一个参数一般都表示流里面的每一个数据,如果说流里面的是字符串类型,那么使用这种方式进行方法引用...引用数组的构造方法 引用数组的构造方法就是为了创建一个数组,创建的数组类型要和流的数据类型保持一致 格式:数据类型[ ] :: new 需求:把集合的数据收集起来放在数组 public class

    7610

    Java 8 - 05 方法引用

    方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下比起使用Lambda表达式, 更易读 。上面的栗子就是借助了Java 8 API ,用方法引用写的一个排序的例子。...当你需要使用方法引用时,目标引用放在分隔符 :: 前,方法的名称放在后面 Enginner::getJob 就是引用了 Enginner类定义的方法 getJob 。...---- 如何构建方法引用 方法引用主要有三类。...用于存放 Enginner 类型的对象,它支持实例方法 getValue ,那么你就可以写 eng::getValue 这种写法是我们在Lambda调用一个已经存在的外部对象方法。...你可以利用 String 类的 compareToIgnoreCase方法来定义一个Lambda表达式。

    47020

    Java】Stream流、方法引用

    Java 的 Stream 并不会存储元素,而是按需计算。 数据源 流的来源。 可以是集合,数组 等。...基本使用 Stream 流的 map 方法基本使用的代码如: 这段代码, map 方法的参数通过方法引用,将字符串类型转换成为了 int 类型(并自动装箱为 Integer...了 MethodRefObject 类的对象实例,则可以通过对象名引用成员方法,代码为: 2.6 通过类名称引用静态方法 由于在 java.lang.Math 类已经存在了静态方法...(n) 方法引用: Math::abs 2.7 通过super引用成员方法 如果存在继承关系,当 Lambda 需要出现 super 调用时,也可以使用方法引用进行替代。...通过this引用成员方法 this 代表当前对象,如果需要引用方法就是当前类的成员方法,那么可以使用 “ this:: 成员方法 ” 的格式来使用方 法引用

    1.3K20

    Java 基础篇】Java方法引用详解

    Java方法引用是一种强大的功能,它允许您在Lambda表达式引用方法,而不是在表达式中直接定义这些方法方法引用使代码更加简洁和可读,尤其在函数式编程中非常有用。...本文将详细介绍Java方法引用,包括引用方法引用对象的实例方法引用类的实例方法引用构造器。 引用方法 引用方法是一种最简单的方法引用方式,它允许您引用类的静态方法。...这通常用于Lambda表达式,以便在表达式执行该静态方法。...引用对象的实例方法 引用对象的实例方法是一种更常见和有用的方法引用方式。它允许您引用已经存在的对象的实例方法,而不是在Lambda表达式定义新的方法。...总结 方法引用是一种强大的功能,使得代码更加简洁和可读。在Java,您可以引用方法、对象的实例方法、类的实例方法和构造器,以适应不同的用例和需求。

    28220

    理解Java的强引用,软引用,弱引用,虚引用

    Java,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了...不同于elementData=null,强引用仍然存在,避免在后续调用 add()等方法添加元素时进行重新的内存分配。...使用如clear()方法释放内存的方法对数组存放的引用类型特别适用,这样就可以及时释放内存。 2....在java,用java.lang.ref.WeakReference类来表示。 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。...弱引用还可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列

    1.8K20

    Java的强引用、软引用、弱引用与虚引用

    Java的强引用、软引用、弱引用与虚引用 Java语言提供了一种强大的垃圾回收机制,通过不同类型的引用来管理内存的对象。...这些引用类型允许开发者在不同的内存压力条件下对对象进行不同程度的管理,优化内存使用和性能。本文将深入探讨Java的这四种引用类型,涵盖它们的定义、使用场景、实现原理以及在实际应用的最佳实践。...一、Java引用类型概述 1.1 引用的基本概念 在Java,对象的存活取决于是否有其他对象持有对它的引用。...Java引用类型分为四类,分别是强引用、软引用、弱引用和虚引用。不同的引用类型对垃圾回收的行为有不同的影响。...六、引用队列与引用的清理 6.1 引用队列的作用 引用队列(Reference Queue)是Java的一个辅助类,用于配合软引用、弱引用和虚引用

    9210

    辨析Java方法参数的值传递和引用传递

    方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示。...究其原因 在Java方法参数列表有两种类型的参数,基本类型和引用类型。...引用数据类型:指针存放在局部变量表,调用方法的时候,副本引用压栈,赋值仅改变副本的引用。但是如果通过操作副本引用的值,修改了引用地址的对象,此时方法以外的引用此地址对象当然被修改。...这是因为Java的自动装箱机制,当在方法执行 flg = true 时,实际在编译后执行的是 flg = Boolean.valueOf(true),即又会产生一个新的Boolean对象。...一个方法返回两个返回值 Java方法只能Return一个返回值,那么如何在一个方法返回两个或者多个返回值呢?我们可以通过使用泛型来定义一个二元组来达到我们的目的。

    1.5K10

    Java成神路 —— 方法引用

    1.1 方法引用符 1. 方法引用符 :: 该符号为引用运算符,而它所在的表达式被称为方法引用 2....介绍 引用方法,其实就是引用类的静态方法 使用说明: Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数 2....介绍 引用对象的实例方法,其实就引用的成员方法 使用说明:Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数 2....格式及范例 ① 格式: 对象::成员方法 ② 范例 :"HelloWorld"::toUpperCase String类方法: public String toUpperCase() 将此String...介绍 引用类的实例方法,其实就是引用的成员方法 使用说明:Lambda表达式被类的实例方法替代的时候 第一个参数作为调用者 后面的参数全部传递给该方法作为参数 2.

    16220

    探究Java引用

    探究Java的四种引用 从JDK1.2版本开始,Java把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。...static的long型时间戳,由GC线程进行GC的时候更新; timestamp属性也是一个时间戳,每次在调用get方法的时候会对其进行更新,JVM用这个属性用于帮助收集和清理软引用。...方法也有点特殊,因为虚引用引用对象相当于没有引用,所以其get方法总是返回null。...程序可以通过判断引用队列是否已经加入了引用,来判断被引用的对象是否将要被垃圾回收,这样就可以在对象被回收之前采取一些必要的措施。 与软引用、弱引用不同,虚引用必须和引用队列一起使用。...#ensureClassInitialized java.lang.ref.Reference.ReferenceHandler#run 这个线程在Reference类的static的构造块启动,

    93310
    领券