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. 自定义控件--基础2
  2. System V IPC
  3. Elasticsearch学习总结(02-28 - 03-04)
  4. [转]国内各大互联网公司相关技术站点2.0版 (集合腾讯、阿里、百度、搜狐、新浪、360等共49个)...
  5. 第七章 ReentrantLock总结
  6. Linux Top命令详解(载自百度经验)
  7. 三十七、深入Vue.js组件Component(下篇)
  8. r语言python print包_python : 批量下载R语言库包
  9. 如何获取大端中的数据_【软件】ProE中各种获取数据方式的区别
  10. VS2003使用后的一点心得
  11. 上海师范大学计算机技术考研分数线,上海师范大学2019年考研复试分数线已公布...
  12. 2D阵列中的峰值检测
  13. markdown引入代码_将Swagger2文档导出为HTML或markdown等格式离线阅读
  14. this指向详解,思维脑图与代码的结合,让你一篇搞懂this、call、apply。系列(一)
  15. Latex beamer 常用操作记录
  16. 苹果怎么用计算机,苹果笔记本怎么用(苹果电脑Mac 系统基本操作介绍)
  17. 2021莆田六中一高考成绩查询入口,2021,我们来了 ——莆田六中2021届《青春•励志•圆梦》高三高考动员誓师大会...
  18. Cadence每日一学_11 | OrCAD原理图DRC检查、BOM表导出、PDF导出、网表导出
  19. 分布式定时任务(XXL_JOB)
  20. [机器学习笔记] 将数据拆分成训练集和测试集的几种方法

热门文章

  1. 【Java的垃圾回收】
  2. Boosting和Bagging区别
  3. 点击复制以及长按识别图中二维码功能
  4. Python实现猫脸识别 | 喵主子福利
  5. zoj 2334 Monkey King
  6. 韶音骨传导耳机好不好用?韶音与南卡骨传导耳机评测对比
  7. StackFrame
  8. Java String字符串转Json
  9. JetBrains.ReSharper 字典
  10. GeForce MX150相对应的NVIDIA CUDA版本_七彩虹ProMaster A1设计师电脑评测:RTX 3080加持 生产力大提升|七彩虹|gpu|nvidia|amd|英特尔|显卡...