双冒号作用:

jdk1.8中lambda 经常需要操作函数式接口表达式,表达式也是需要人写出来的,如果有现成的,那么久不需要写了,这里的双冒号其实就是对方法体的一种引用。

以下是Java 8中方法引用的一些语法:

1、静态方法引用(static method)语法:classname::methodname 例如:Person::getAge
2、对象的实例方法引用语法:instancename::methodname 例如:System.out::println
3、对象的超类方法引用语法: super::methodname
4、类构造器引用语法: classname::new 例如:ArrayList::new
5、数组构造器引用语法: typename[]::new 例如: String[]:new

静态方法语法示例:

import java.util.Arrays;
import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/*** * @author wmd* @date 2019年2月20日 下午2:19:13*/
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan("com.zhoufy")
public class Demo {@Testpublic void test() {List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");//静态方法语法    ClassName::methodNamelist.forEach(Demo::print);}public static void print(String content){System.out.println(content);}
}

类实例方法语法使用示例:

import java.util.Arrays;
import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/*** * @author wmd* @date 2019年2月20日 下午2:19:13*/
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan("com.zhoufy")
public class Demo {@Testpublic void test() {List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");//对象实例语法    instanceRef::methodNamelist.forEach(new Demo()::print);}public void print(String content){System.out.println(content);}
}

超类方法语法使用示例:

import java.util.Arrays;
import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** @author wmd* @date 2019年2月20日 下午2:41:38*/
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan("com.zhoufy")
public class Example extends BaseExample{@Testpublic void test() {List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");//对象的超类方法语法: super::methodName list.forEach(super::print);}
}class BaseExample {public void print(String content){System.out.println(content);}
}

类构造器语法使用示例:某个接口的内部类是个表达式,表达式借用对象的无惨构造器来完成。

无惨构造:

public class Example {public Example() {}@Testpublic void test() {Runnable aNew = Example::new;//利用Example无惨构造创造的内部类,表达式就是构造方法InterfaceExample com =  Example::new;//利用Example无惨构造创造的内部类,表达式就是构造方法InterfaceExample com2 =  Example::new;//利用Example无惨构造创造的内部类,表达式就是构造方法Example bean = com.create();System.out.println(bean);}interface InterfaceExample{Example create();}}

有参构造:

public class Example {private String name;Example(String name){this.name = name;}@Testpublic void test() {InterfaceExample com =  Example::new;//利用Example无惨构造创造的内部类,表达式就是构造方法InterfaceExample com3 =  (str)->{return new Example(str);};//因为com3是InterfaceExample的实现类啊,它是可以简化成上面这样,其实它就是返回一个对象,所以它等于Example的有参构造Example bean = com.create("用的是Example的有参构造器当表达式");System.out.println(bean);}interface InterfaceExample{Example create(String name);}
}

数组构造器语法使用例子:

package top.lisicheng;import java.util.function.Function;/*** @ClassNameExampl* @Description:* @Author:wumingdu* @Date2022/4/3 17:17* @Version V1.0**/
public class Exampl {//数组构造器public Exampl[] Exampl(Integer integer) {Exampl[] qqq = new Exampl[integer];return qqq;}public static void main(String[] args) {Function<Integer, Exampl[]> integerFunction1 = new Function<Integer, Exampl[]>() {@Overridepublic Exampl[] apply(Integer integer) {return new Exampl[integer];}};Function<Integer, Exampl[]> integerFunction2 = Exampl[]::new;//integerFunction2和integerFunction1的作用是一样的,Exampl[] array = integerFunction2.apply(4);  //这里的4是数组的大小for(Exampl e:array){System.out.println(e);  //如果输出的话,你会发现会输出4个空对象(null)}}
}

jdk新特性::作用相关推荐

  1. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  2. 【JavaSE】JDK新特性(二)————接口新特性,函数式接口(Suppier,Comsumer,Predicate,Function)

    文章目录 1.接口新特性 1.1 接口组成更新概述 1.2 接口中的默认方法 1.3 接口中的静态方法 1.4 接口中的私有方法 2. 函数式接口 2.1 函数式接口概述 2.2 函数式接口作为方法的 ...

  3. Java JDK新特性探究-精简的JRE

    java8有个很好的特性,即JEP161(http://openjdk.java.net/jeps/161 ),该特性定义了Java SE平台规范的一些子集,使java应用程序不需要整个JRE平台即可 ...

  4. JDK新特性-LocalDateTime

    菜鸟教程 一.写代码经常用到时间格式化,时间相加减(想知道前一天和后一天,等等),Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 二.主要内容 ...

  5. jdk新特性(二)stream流

    stream流 为什么需要stream流, 1.Stream流的引入可以使编程更加优雅,去除冗余代码,增加代码运行效率. 2.Stream流把真正的函数式编程风格引入到Java中. 案例 public ...

  6. day02_java基础加强(jdk新特性 javaa设计模式 反射)

    1.Tcp协议发送数据 当使用tcp发送数据的时候 必须的有服务器端,当第一次执行客户端代码会报如下错误 java.net.ConnectException: Connection refused: ...

  7. oracle jdk1.7 内存,JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

    上一篇:Java 15 正式发布, 14 个新特性 JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. ...

  8. JDK 16 正式发布,一次性发布 17 个新特性,不服不行

    JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. 来看下 Oracle Java 支持路线图: Ora ...

  9. JAVA17版本,JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

    JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. 来看下 Oracle Java 支持路线图: Ora ...

最新文章

  1. 写你的shell,其实很简单[架构篇]
  2. POJ 1860 Currency Exchange (Bellman-Ford)
  3. IDEA无法识别pom.xml文件,内容全部显示为灰色,或者无颜色
  4. MyEclipse移动开发教程:移动Web模拟器指南(一)
  5. 「PowerBI」分析服务多维数据结构重回关系数据库的一大绝招
  6. hbase 学习(十三)集群间备份原理
  7. 铺地毯(洛谷-P1003)
  8. 逼疯上海人的垃圾分类满月了:羊肉串变羊肉吕,奶茶里珍珠按颗算...
  9. 知乎爬虫最新 x-zse-96参数解密教程
  10. linux的manual手册不存在,在 Linux 命令行下使用“原力”
  11. stm32+ESP8266实现最简单的手机控制LED灯
  12. 一张图解释清楚大数据技术架构,堪称阿里的核心机密
  13. 集合的基本运算及文氏图
  14. Elasticsearch:Dissect 和 Grok 处理器之间的区别
  15. Android分屏显示(多窗口支持) 开发总结
  16. html创建电子邮件链接教程
  17. RTC实时时钟(学习笔记)
  18. 哈佛结构和冯·诺依曼结构
  19. 使用pyhton采用多线程方式ping IP
  20. Python Paramiko模块的使用

热门文章

  1. 2016c语言模拟试卷A,2016C语言模拟试卷(程序填空).doc
  2. 销售需求丨奖金权重分配法
  3. 爬虫第十式:多线程爬取小米应用商店聊天社交类别
  4. 【Excel基础训练】函数入门:基础操作与常用函数
  5. Ubuntu安装升级glibc
  6. STM32.UART5无法进入中断,HardFault
  7. 【字节跳动面试题】赛马问题 64匹马8个跑道最少几次赛出最快的4匹马
  8. 《离散数学及其应用》读书笔记【一】逻辑和证明
  9. Canvas学习:绘制圆和圆弧
  10. 毕业设计_校园志愿者系统平台的设计与实现