举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java 静态引用 Java 静态方法引用

java 静态引用 Java 静态方法引用

2023-03-05 20:20 Java教程

java 静态引用 Java 静态方法引用

java 静态引用

Java 静态引用是指在编译时就已经确定的引用,它可以指向一个类、一个方法或者一个字段。静态引用是 Java 编译器在编译期间使用的,它可以帮助编译器将代码转换成字节码。

静态引用可以分为三种:

  • 静态字段引用:这是最常见的静态引用,它指向一个静态字段。例如:
public class Test { 
    public static int x = 10; 

    public static void main(String[] args) { 
        System.out.println(Test.x);  // 这里使用了静态字段引用 
    } 
}
  • 静态方法引用:这是另一种常见的静态引用,它指向一个静态方法。例如:
public class Test { 

    public static void printMessage() { 
        System.out.println("Hello World!"); 
    } 

    public static void main(String[] args) { 
        Runnable r = Test::printMessage; // 这里使用了静态方法引用  

        Thread t = new Thread(r);  

        t.start();  
    }  
} 
  • 静态类型引用: 还有一种特殊的静态引用叫做静态类型引用。它不会直接指向一个特定的对象或者方法,而是会将整个对象作为整体来看待。例如:
public class Test {  

    public static void main(String[] args) {  

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);  

        list.forEach(System.out::println); // 这里使用了静态类型引用  

    }  
} 

Java 静态方法引用

Java Lambda - Java静态方法引用


lambda表达式表示在函数接口中定义的匿名函数。

方法引用使用现有方法创建lambda表达式。

方法引用的一般语法是

Qualifier::MethodName

两个连续的冒号充当分隔符。

MethodName 是方法的名称。

限定符告诉在哪里找到方法引用。

例子

例如,我们可以使用 String::length String 类引用length方法。这里 String 是限定符, length 是方法名。

我们只需要指定方法名。

无需指定方法的参数类型和返回类型。

方法引用的目标类型是功能接口。它确定方法的签名并在必要时解析重载的方法。


方法引用类型

有六种类型的方法引用。

  • TypeName::staticMethod - 引用类的静态方法,接口或枚举
  • objectRef::instanceMethod - 引用实例方法
  • ClassName::instanceMethod - 从类中引用实例方法
  • TypeName.super::instanceMethod - 从对象的父类型引用实例方法
  • ClassName::new - 引用一个类的构造函数
  • ArrayTypeName::new - 对指定数组类型的构造函数的引用

静态方法引用

静态方法引用允许我们使用静态方法作为lambda表达式。

静态方法可以在类,接口或枚举中定义。

以下代码定义了两个lambda表达式。

第一个lambda表达式func1是通过定义输入参数x并提供lambda表达式主体来创建的。基本上,这是创建lambda表达式的正常方式。

第二个lambda表达式func2是通过从Integer类引用静态方法创建的。

import java.util.function.Function;

public class Main {
  public static void main(String[] argv) {
    // Using  a  lambda  expression
    Function<Integer, String> func1  = x -> Integer.toBinaryString(x);
    System.out.println(func1.apply(10));

    // Using  a  method  reference
    Function<Integer, String> func2  = Integer::toBinaryString;
    System.out.println(func2.apply(10));
  }  
}

从Integer类的静态方法的签名如下。

static String toBinaryString(int i)

上面的代码生成以下结果。

例2

以下代码显示了如何使用Integer.sum作为lambda表达式。

import java.util.function.BiFunction;

public class Main {
  public static void main(String[] argv) {

    // Uses a lambda expression
    BiFunction<Integer, Integer, Integer> func1 = (x, y) -> Integer.sum(x, y);
    System.out.println(func1.apply(2, 3));

    // Uses a method reference
    BiFunction<Integer, Integer, Integer> func2 = Integer::sum;
    System.out.println(func2.apply(2, 3));

  }
}

上面的代码生成以下结果。

重载中的静态方法引用

我们可以在静态方法引用中使用重载的静态方法。

当重载方法时,我们必须更加注意方法签名和相应的函数接口。

在下面的列表中,我们有来自Integer类的三个版本的valueOf()。

static Integer valueOf(int i)
static Integer  valueOf(String s)
static Integer  valueOf(String s, int radix)

以下代码显示了如何使用不同的目标函数接口与重载的Integer.valueOf()静态方法。

import java.util.function.BiFunction;
import java.util.function.Function;

public class Main{
  public static void main(String[] argv){
    // Uses  Integer.valueOf(int)
    Function<Integer, Integer> func1  = Integer::valueOf;

    // Uses  Integer.valueOf(String)
    Function<String, Integer> func2  = Integer::valueOf;

    // Uses  Integer.valueOf(String, int)
    BiFunction<String, Integer,  Integer> func3  = Integer::valueOf;

    System.out.println(func1.apply(7)); 
    System.out.println(func2.apply("7")); 
    System.out.println(func3.apply("101010101010", 2));
  }
}

上面的代码生成以下结果。

阅读全文
以上是名动网为你收集整理的java 静态引用 Java 静态方法引用全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们