System.out::println; 是什么鬼???
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; 是什么鬼???相关推荐
- 求求你别再用 System.out.println 了!!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:my.oschina.net/yuchener/bl ...
- 深入研究 System.out.println()
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源: 1t.click/k87 什么是System.out ...
- 最重要的事情 一 、消息通信机制(1)ant 打包方法(2) system.out.println()用法 二、UML学习
最重要的事情 一 .消息通信机制(1)ant 打包方法(2) system.out.println()用法 二.UML学习
- 居然还有人在用 System.out.println打日志的吗?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 雨尔辰辰 来源 | my.oschina.ne ...
- IntelliJ中的main函数、for循环、System.out.println()快捷键
main函数 输入: psvm 回车 输出: public static void main(String[] args) {} for循环 输入:fori 回车 输出: for (int i = 0 ...
- java中的System.out.print()与System.out.println()的区别
System.out.print();与System.out.println(); 前者输出不换行,比如: System.out.print("a"); System.out.pr ...
- java中system.out.println()是什么意思【笔记自用】
在Java编程中,我们常常用System.out.println()方法来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 这里就涉及用到一个stat ...
- 字节一面,面试官拿 System.out.println() 考了我半个小时?我傻了
前言 之前春招面试我被问及,你如何理解System.out.println() ? 今天我就来给大家分享一下! 学了这么久的面向对象编程,那如何用一行代码体现呢? 如果你能自己读懂System.out ...
- java logfaction_Java调试的变迁:从System.out.println到log4j
jungleford如是说 用惯了VC的人刚接触Java大概很不习惯代码的调试,的确,在M$的大部分IDE都做得相当出色,包括像VJ++这样一直被Java程序员称为是"垃圾" ...
最新文章
- html(超链接定义锚点与特殊符号转义)
- 使用python收取IMAP邮件即fox邮件且设置为已读
- 8000 字 + 21 张图,服务端高并发分布式架构 14 次演进之路
- django 文档生成器
- 【高效JDBC编程工具JadePool快速入门】
- 北斗导航 | 现代授时技术——北斗GPS导航系统
- leetcode1302. 层数最深叶子节点的和(深度优先搜索)
- Storm系列(四)Topology提交校验过程
- 9月10日见!OPPO再曝Reno2相机细节:你想要的全都有
- 数据:灰度比特币信托基金溢价达41%创近一年新高
- PHP类中Static方法效率测试
- Linux驱动开发: USB驱动开发
- UNI-APP实现扫描二维码
- cvc 降噪_此降噪非彼降噪,你要的是哪种降噪?
- 善战者 说——孙子兵法
- asp.net md5加密
- Windows10无法启动防火墙
- IE11的F12功能无法正常使用
- 心情随笔--我与考研战友的故事
- 六、阻塞队列与源码分析(上)