Scope Resolution Operator in Java

2025年4月11日 | 阅读 3 分钟

C++ 支持作用域解析运算符 (::),它允许我们解决标识符的歧义调用或引用。与 C++ 不同,Java 不支持作用域解析运算符。Java 使用相同的运算符 (::) 但名称不同。Java 中的作用域解析运算符被称为方法引用运算符双冒号运算符。在本节中,我们将讨论Java 中的作用域解析运算符。

方法引用运算符用于通过类直接引用方法来调用方法。我们可以使用方法引用 运算符 而不是 lambda 表达式,因为它与 lambda 表达式的行为相同。

lambda 表达式和方法引用运算符之间的唯一区别在于,它不提供对方法的委托,而是通过方法名称直接引用该方法。目标引用放在运算符 (::) 之前,方法名称写在运算符之后。

Scope Resolution Operator in Java

语法

lambda 表达式和方法引用运算符都是通过方法引用调用现有方法的途径,可以提高可读性。让我们通过一个例子来理解它。

首先,我们将创建一个 Java 程序并使用 lambda 表达式来访问列表。它还阐明了 lambda 表达式和方法引用运算符之间的区别。

示例

编译并运行

输出

San Jose
Las Vegas
Austin
New York
Denver
Portland

在上面的程序中,我们使用了 lambda 表达式来访问元素。

让我们在上面的程序中使用方法引用运算符来访问元素。我们对上面的程序做了一个小改动。

示例

编译并运行

输出

San Jose
Las Vegas
Austin
New York
Denver
Portland

使用 lambda 表达式和方法引用运算符,我们得到相同的输出。因此,很明显这些是通过方法引用调用现有方法的途径。

方法引用类型

Java 中有四种方法引用类型

类型描述语法示例
静态方法引用它用于引用类中的静态方法。ContainingClass::staticMethodNameMath::floor 等同于 Math.floor(x)
特定对象实例方法的引用它使用对已提供对象的引用的实例方法。containingObject::instanceMethodNameSystem.out::println 等同于 System.out.println(x)
特定类型任意对象实例方法的引用它在对上下文提供的对象的引用上调用实例方法。ContainingType::methodNameString::indexOf 等同于 str.indexOf()
构造函数引用它提供了对构造函数的引用。ClassName::newLinkedList::new 等同于 new LinkedList()

以下是关于 Java 中作用域解析的一些要点

  1. 访问类成员:在 Java 中,我们使用点运算符 (.) 来访问类成员(变量和方法)。例如,使用 object.methodName() 在对象上调用方法。
  2. 静态成员:要访问类的静态成员,我们使用类名后跟点运算符。例如,ClassName.staticMethod()。
  3. 继承和重写:在处理继承时,我们可以使用 super 来引用超类的成员。例如,super.methodName() 调用父类的方法。
  4. 包和导入语句:Java 使用包名称来定义作用域。我们可以从其他包导入类以在当前类中使用它们。例如,import java.util.List 允许我们使用 java.util 包中的 List 接口。
  5. 嵌套类:在嵌套类(内部类)的情况下,我们可以使用外部类的名称来访问外部类的成员。例如,OuterClassName.this.member 指的是内部类中外部类的成员。