静态方法引用
- 方法引用:在某些特殊场景下,直接引用某个类或者对象中的方法。语法是 类名/对象名::方法
- 静态方法引用语法: 类名::静态方法
- 使用场景
- 如果某个Lambda表达式里只是调用一个静态方法,并且“→”前后参数的形式一致,就可以使用静态方法引用。
//定义一个Double类型数组,保存5个小数 Double[] arr={182.5,165.5,177.5,170.5,180.5}; //对数组中的小数按照升高进行降序排序 //Arrays.sort(arr, (o1, o2) -> Double.compare(o1,o2)); Arrays.sort(arr, Double::compare);
实例方法引用
- 对象名::实例方法。
- 使用场景
- 如果Lambda表达式里只是通过对象名称调用一个实例方法,并且“→”前后参数的形式一致,就可以使用实例方法引
ArrayList<String> list = new ArrayList<>(); list.add("张益达"); list.add("王大锤"); list.add("李大壮"); list.add("王小花"); //list.forEach(s -> System.out.println(s)); PrintStream out = System.out;// 一个System对象 //list.forEach(s -> out.println(s)); list.forEach(out::println); //也可以写成list.forEach(System.out::println);- 这里的System.out实际上是是在引用一个系统早就为你创建好的、现成的对象。
- 可以把 Java 源码里的
System类想象成这样(简化版):
public final class System { // 这是一个静态的常量,类型是 PrintStream public static final PrintStream out; // ... 其他代码 }- 当你运行 Java 程序时,JVM(Java 虚拟机)在启动阶段就会加载
System类。在加载的过程中,JVM 底层会自动帮你实例化(创建)这个PrintStream对象,并把它赋值给out。这个对象负责将数据输出到控制台(标准输出流)。 - 在代码里写下
System.out时,会获取并使用 JVM 启动时就准备好的那个全局唯一的打印流对象。 - 所以也可以简写为
ArrayList<String> list = new ArrayList<>(); list.add("张益达"); list.add("王大锤"); list.add("李大壮"); list.add("王小花"); //list.forEach(s -> System.out.println(s)); list.forEach(System.out::println); //也可以写成list.forEach(System.out::println); - 可以把 Java 源码里的