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); // 这里使用了静态类型引用 } }
lambda表达式表示在函数接口中定义的匿名函数。
方法引用使用现有方法创建lambda表达式。
方法引用的一般语法是
Qualifier::MethodName
两个连续的冒号充当分隔符。
MethodName
是方法的名称。
限定符
告诉在哪里找到方法引用。
例如,我们可以使用 String::length
从 String
类引用length方法。这里 String
是限定符, length
是方法名。
我们只需要指定方法名。
无需指定方法的参数类型和返回类型。
方法引用的目标类型是功能接口。它确定方法的签名并在必要时解析重载的方法。
有六种类型的方法引用。
静态方法引用允许我们使用静态方法作为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)
上面的代码生成以下结果。
以下代码显示了如何使用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 IO教程 - Java文件操作文件创建我们可以使用File类的createNewFile()方法创建一个新文件:File dummyFile = new File(test....
Java toUpperCase() 方法JavaCharacter类toUpperCase() 方法用于将小写字符转换为大写。语法char toUpperCase(char ch)参数ch --...
Java IO教程 -Java文件系统Java 7引入了新的输入/输出2(NIO.2)API并提供了一个新的 I/O API。它向Java类库添加了三个包:java....