System.out::println解读

个人总结:首先调用System里的Out类掉用plintln方法,会有一个参数传进去,就是foreach的其中一个,然后方法里会去打印这个参数

创建出一个数组

List<String> strList = Arrays.asList("liYahui", "Yahui", "hui");
strList.forEach(System.out::println);

第一印象, 哇, 好高大上的写法, 那么这究竟是怎样的一种语法呢。
我们一步一步来探究:
首先, 我们看一下是java.lang.Iterable<T>下的一个默认方法forEach调用的, 好家伙, 一看到这个function包下面的被@FunctionalInterface注解声明的Consumer<T>接口, 瞬间就了然了, 这不又是函数式编程搞的鬼么?(如果大家不理解什么是函数式编程, 可以去看看我的一篇博客 —— 深入浅出讲解Optional包装类, 里面有详细的介绍和代码 )。
现在的问题应该很明朗了, System.out::println这段代码其实就是Consumer<T>接口的一个实现方式啊。 具体是怎么实现的, 我们再码一段代码。

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

然后, 我们惊喜的发现和上面的代码运行结果是一制的, 我们基本上可以断定, 上面那种写法是下面这种的一种缩写形式。 就是把你遍历出来的每一个对象都用来去调用System.out(也就是PrintStream类的一个实例)的println方法。
最后, 大家是不是有一个想法, 想自己写一个Consumer接口的实现类, 让foreach调用一下。

/*** 打印加强处理类* <p>* * @author YangHang* @Date 2018年12月9日 下午12:25:30**/
public class PrintUtil {/*** 对要遍历的元素添加add操作*/public void addString(String x) {System.out.println(x + "add");}
}

然后, 我们这么来玩

@Test
public void testDemo3() {List<String> strList = Arrays.asList("YangHang", "AnXiaoHei", "LiuPengFei");strList.forEach(new PrintUtil()::addString);
}

运行一下, 果然可以。
但是我发现, 如果是静态方法的时候必须得用类名双冒号静态方法, 这估计是语法的一种, 发夹注意就好。

个人总结:首先调用System里的Out类掉用plintln方法,会有一个参数传进去,就是foreach的其中一个,然后方法里会去打印这个参数

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. blender硬表面建模渲染终极教程
  2. SpringBoot自定义错误页面
  3. ASP.NET Core Web APi获取原始请求内容
  4. python正则表达式知识点
  5. java util map,我应该如何命名java.util.Map?
  6. 中国消费者为何不愿为App付费?
  7. 网络流之最大流算法(EdmondsKarp)
  8. 专业App开发:设计App图标的三个关键点
  9. Android使用adb命令查看CPU信息
  10. 手机移动端浏览器或PC端浏览器莫名出现计算错误或莫名返回到登录界面等问题的解决.
  11. oracle异步sql,Oracle sqlplus登陆异步io错误
  12. SpringApplication.run方法分析
  13. JavaScript教程带你快速入门
  14. 【java学习】多线程之高并发编程
  15. cnpm 安装yarn
  16. 头脑极度开放:前额皮层大战杏仁核
  17. knife4j文档-个人笔记
  18. Android程序的入口
  19. [ CTF ]【天格】战队WriteUp-2022年第二届“长城杯”网络安全大赛
  20. 《写给大家看的设计书》《写给大家看的色彩书》《点石成金》《形式感》学习笔记...

热门文章

  1. n1 openwrt 挂载u盘_openwrt 挂载U盘/硬盘+交换分区
  2. P2P如何实现内网穿透(打洞)
  3. 电脑IOS模拟器用逍遥模拟器电脑上玩部分手游和苹果手机互通
  4. 服务器登录账号不能切换,切换LDAP服务器后用户无法登陆
  5. java 断言assert_java断言assert的使用
  6. 单反数码相机存储卡数据恢复
  7. Mac中用Excel导入csv文件出现乱码
  8. 探索制造业供应链的嬗变之道,加快布局柔性供应链基础设施
  9. xp桌面计算机隐藏设置方法,XP系统桌面右下角隐藏图标不见了,怎么调出来?
  10. jetbrains Rider使用