System.out::println()的理解?

31 篇文章 2 订阅
31 篇文章 2 订阅

请看这段代码:

// 创建出一个数组
List<String> list = Arrays.asList("YangHang", "AnXiaoHei", "LiuPengFei");

System.out::println这段代码其实就是Consumer接口的一个实现方式。 具体是怎么实现的, 我们再一段代码。

    @Test
    public void testDemo2() {
      List<String>  list= Arrays.asList("YangHang", "AnXiaoHei", "LiuPengFei");
        list.forEach(x -> {
            System.out.println(x);
        });
    }

其中System是Java.lang包中的一个类,而Out是System中的一个字段,也就是System的一个成员变量。并且是用static修饰的,所以可以用System这个类名直接去调用,这便是System.out的由来。
println( ) 并不是System类中的一个方法,而是PrintStream中的一个方法!
在这里插入图片描述
可以根据以上System的源码中看得出,out的修饰符是static,而其类型数引用数据类型中的PrintStream,所以out可以使用PrintlnStream中的println( )方法。那么接下来在去从PrintStream中找到println( )或者print( )方法的源码,
在这里插入图片描述
在这里插入图片描述可以看得出,println( )和print( )这两个方法都是PrintStream类中的方法,至于为什么println( )和print( )这两个方法什么数据类型都可以输出,是因为在PrintStream类中重载了 Println( )方法,包含了相关的数据类型。(具体内容看源码,不再截图)
总结:
因此,通过System.out的方式获取一个PrintStream实例的方式才会成为实际使用的方式。
分析 Lambda表达式 实现Consumer 接口的 accpet()方法参数列表(参数个数,参数类型) 返回值类型 与 PrintStream对象中的 println()方法 参数列表(参数个数,参数类型) 返回值类型两个方法 都是一个参数 无返回值。即可使用 “对象::实例方法名” 的语法糖——》System.out::println()语法!

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值