1.第一次见到该表达式的感受

第一次见到该表达式的时候,我还不知道什么是方法引用,当时真是一脸蒙圈,然后问了好多同事,给我的解释也是五花八门,但我还是感觉莫名其妙,有段时间想着就当一个特例记住就好了,不要再去深究了!!!但是我这个人,在这种时候就是很难说服自己,于是有了上篇文章,再回过头来看这个问题,其实就变得非常简单了。

2.揭开System.out::println的神秘面纱

有过上篇博客的铺垫,这里就直接上代码了:

package com.nrsc.lambda.MethodReference;import java.io.PrintStream;
import java.util.function.Consumer;public class Demo2 {public static void main(String[] args) {/*** 我初次见到的写法*/Consumer<String> fun = System.out::println;fun.accept("hello world");System.out.println("========================================");/*** 现在想想其实很简单,查看println方法的源码得知println是PrintStream类中的一个非静态方法* 因此按照方法引用的逻辑,它肯定可以使用* “函数式接口 变量名 = 类实例::方法名” 的方式对该方法进行引用** 而System.out的作用肯定就是来获取PrintStream类的一个类实例,** 验证代码如下:*/PrintStream out = System.out;Consumer<String> fun2 = out::println;fun2.accept("hello beijing");}
}

3.为什么不直接使用PrintStream,而要用System.out呢?

不知道大家会不会有此疑惑,反正我当时看明白System.out::println这句话的时候,就在想为什么不直接创建PrintStream对象来构建其类实例呢?

这个问题其实只要扫一眼PrintStream类的源代码,应该就不会再有了。PrintStream类并没有无参构造,而其有参构造函数不是要流,就是要File文件,想要直接通过new一个PrintStream类的方式来创建实例,将变得非常麻烦。因此,通过System.out的方式获取一个PrintStream实例的方式才会成为实际使用的方式。

System.out::println; 是什么鬼???相关推荐

  1. 求求你别再用 System.out.println 了!!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:my.oschina.net/yuchener/bl ...

  2. 深入研究 System.out.println()

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:    1t.click/k87 什么是System.out ...

  3. 最重要的事情 一 、消息通信机制(1)ant 打包方法(2) system.out.println()用法 二、UML学习

    最重要的事情    一 .消息通信机制(1)ant 打包方法(2) system.out.println()用法      二.UML学习

  4. 居然还有人在用 System.out.println打日志的吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 雨尔辰辰 来源 | my.oschina.ne ...

  5. IntelliJ中的main函数、for循环、System.out.println()快捷键

    main函数 输入: psvm 回车 输出: public static void main(String[] args) {} for循环 输入:fori 回车 输出: for (int i = 0 ...

  6. java中的System.out.print()与System.out.println()的区别

    System.out.print();与System.out.println(); 前者输出不换行,比如: System.out.print("a"); System.out.pr ...

  7. java中system.out.println()是什么意思【笔记自用】

    在Java编程中,我们常常用System.out.println()方法来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 这里就涉及用到一个stat ...

  8. 字节一面,面试官拿 System.out.println() 考了我半个小时?我傻了

    前言 之前春招面试我被问及,你如何理解System.out.println() ? 今天我就来给大家分享一下! 学了这么久的面向对象编程,那如何用一行代码体现呢? 如果你能自己读懂System.out ...

  9. java logfaction_Java调试的变迁:从System.out.println到log4j

    jungleford如是说     用惯了VC的人刚接触Java大概很不习惯代码的调试,的确,在M$的大部分IDE都做得相当出色,包括像VJ++这样一直被Java程序员称为是"垃圾" ...

最新文章

  1. html(超链接定义锚点与特殊符号转义)
  2. 使用python收取IMAP邮件即fox邮件且设置为已读
  3. 8000 字 + 21 张图,服务端高并发分布式架构 14 次演进之路
  4. django 文档生成器
  5. 【高效JDBC编程工具JadePool快速入门】
  6. 北斗导航 | 现代授时技术——北斗GPS导航系统
  7. leetcode1302. 层数最深叶子节点的和(深度优先搜索)
  8. Storm系列(四)Topology提交校验过程
  9. 9月10日见!OPPO再曝Reno2相机细节:你想要的全都有
  10. 数据:灰度比特币信托基金溢价达41%创近一年新高
  11. PHP类中Static方法效率测试
  12. Linux驱动开发: USB驱动开发
  13. UNI-APP实现扫描二维码
  14. cvc 降噪_此降噪非彼降噪,你要的是哪种降噪?
  15. 善战者 说——孙子兵法
  16. asp.net md5加密
  17. Windows10无法启动防火墙
  18. IE11的F12功能无法正常使用
  19. 心情随笔--我与考研战友的故事
  20. 六、阻塞队列与源码分析(上)

热门文章

  1. 基于RC电路的DA14585测量NTC电阻阻值
  2. 设计模式之 Interpreter(解释器) 通俗理解
  3. 6174C语言编程,C语言代码实现:6174数学黑洞(卡普雷卡尔常数)
  4. .NET Data Provider
  5. PBOC/EMV之持卡人验证
  6. C语言兔子生兔子问题
  7. 顺序表的顺序存储表示
  8. 如何去除图片中的白色背景(变透明)
  9. 计算机二级Python真题(七)
  10. 服务器系统和win10区别,win10分区使用mbr好还是gpt好_win10系统gpt分区和mbr分区的区别...