五月十六号java基础知识点
1.方法引用就是用双冒号“::”来简化Lambda表达式
2.方法引用四种引用方式:
1)对象名::实例方法名 //用对象名调用实例方法
2)类名::静态方法名 //用类名引用静态方法
@FunctionalInterface
interface StringFunc{
public String func(String s);
}
public class app13_9 {
//定义静态方法sop
static String sop(StringFunc sf,String s){
return sf.func(s);//是函数式接口类型
}
public static void main(String[] args) {//Lambda表达式作为参数传递给方法
//先定义字符型变量instr以及outstr,并输出原字符
String outstr,instr = "Lambda 表达式 good";
System.out.println("原字符串:"+instr);
//将字符串instr转换成大写赋值给outstr
outstr = sop((str)->str.toUpperCase(),instr);
System.out.println("转换成大写字母后:"+outstr);
//将字符串去掉空格后
outstr = sop((str)->{
String result = "";
for (int i = 0; i <str.length(); i++) {
if(str.charAt(i)!=' '){//charAt()方法返回指定位置字符
result+=str.charAt(i);
}
}
return result;
},instr);
System.out.println("去掉空格后的字符串:"+outstr);
//将字符串反序输出
StringFunc reverse = (str)->{
String result ="";
for (int i = str.length()-1; i >=0 ; i--) {
result+=str.charAt(i);
}
return result;
};
System.out.println("反序后字符串:"+sop(reverse,instr));
}
}
3)类名::实例方法名 //用类名引用实例方法名
第一个参数作为方法调用者,其他参数传递给方法
字符串1.compareTo(字符串2)
str1::compareTo等价于(str1,str2)->str1.compareTo(str2);
4)类名::new //用类名引用构造方法
可把构造按方法引用赋值给与构造方法具有相同相同方法头的任何函数式接口对象
@FunctionalInterface
interface IShow<T>{
public T create(String s,int n);
}
class Persons{
String name;
int age;
public Persons(){
name = "刘洋";
age = 24;
}
public Persons(String n,int a){
this.name = n;
this.age = a;
}
@Deprecated
public String toString(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
public class app13_11 {
public static void main(String[] args) {
IShow<Persons> na = Persons::new;//创建Persons构造方法的引用
Persons p = na.create("陈磊",23);//调用create()方法,但引用Persons构造方法
System.out.println(p);
}
}
3.注意:被引用方法参数列表和返回值类型,必须与函数式接口中的抽象方法参数列表和返回值类型
一致
4.说明:前三种方法引用::右边的方法名后不能有括号,第四种::后面只能是关键字
5.前两种只用于只有一个参数情况,方法等同于Lambda表达式
例如:System.out::print等同于System.out.println(s);
第三种用于两个及以上,第一个参数是调用方法对象
@FunctionalInterface
interface Ishow<P,R>{
//抽象方法info()的方法头与引用方法valueOf()的方法头有相同定义,方法info()的,名字就是方法引用的名字
public R info(P p);
}
public class app13_10 {
public static void main(String[] args) {
Ishow<Integer,String> ip = String::valueOf;//用类名String引用静态方法valueOf
String s = ip.info(886);//调用方法info相当于调用valueOf方法
System.out.println(s);
}
}
6.三种方式实现函数式接口Comsumer<T>,接口中包含一个抽象方法void accept(T t).
1)Comsumer<String> con = new Comsumer<String>
{
@Override
public void accept(String str){
System.out.println(str)}
};
con.accept("我是一个消费型接口");
2)Lambda表达式
Comsumer<String> con = str->System.out.println(str);
con.accept("我是一个消费接口");
3)方法引用
Comsumer<String> con =System.out::println
con.accept("我是一个消费接口")
总结:学习了四种方法引用
第一种:对象名::实例方法名
第二种:类名::静态方法名
第三种:类名::实例方法名
第四种:类名::new//类名引用构造方法
前两种中只有有一个参数,等同于Lambda表达式
//抽象方法info()的方法头与引用方法valueOf()的方法头有相同定义,方法info()的,名字就是方法引用的名字
public R info(P p);
着个语句没有理解,方法头是什么,并且为什么可以直接引用valueOf()函数
方法头指的是public R,R是泛型指方法的类型
IShow<Persons> na = Persons::new;//创建Persons构造方法的引用
类名::new构造方法引用赋值给Person类属性的接口类实现对象
Persons p = na.create("陈磊",23);//调用create()方法,但引用Persons构造方法
调用接口中的create()方法,但是却在定义Person类对象时调用了构造方法
五月十六号java基础知识点的更多相关文章
- 十六、Java基础---------集合框架之Set
写在前面的话,这篇文章在昨天就写好了,今天打开的时候一不小心将第二天的文章粘贴到了这篇文章,很不幸的是除了标题之外依然面目全非,今天带着沉痛的心情再来写这篇文章! 上篇文章介绍了Collection体 ...
- 十六、JAVA基础(堆和栈)
一.堆和栈 堆和栈都是JAVA中的存储结构,也就是说,都是内存中存放数据的地方. 1.堆:(存放由new创建的对象和数组) 引用类型的变量,内存分配一般在堆上或者常量池(字符串常量,基本数据类型常量) ...
- 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)
1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...
- 《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
1.简介 自动化测试中如何输出日志文件.任何软件,都会涉及到日志输出.所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件.开发通过看日志文件,知道这个崩溃产生的原因,至少知道 ...
- Java基础知识点总结
前言 本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其 ...
- Java基础知识点(四)
前言:记录Java基础知识点,方便熟悉与掌握. 1.面向对象的"六原则一法则" “六原则一法则”:单一职责原则.开闭原则.依赖倒转原则.里氏替换原则.接口隔离原则.合成聚合复用原则 ...
- 《手把手教你》系列技巧篇(五十六)-java+ selenium自动化测试-下载文件-上篇(详细教程)
1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...
- 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...
- Java基础知识点(三)
前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...
- Java基础知识点(二)
前言:Java的基础知识点不能间断. 1.Array和ArrayList的区别 关于Array的用法,参看:http://blog.csdn.net/b_11111/article/details/5 ...
随机推荐
- P1138 第 k 小整数
P1138 第 k 小整数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) dalao 勿喷,适合新手 思路就是排序加查重,最后判断第k小数.思路十分简单. 刚开始我一直想二维循环查 ...
- Vuex的核心State
State提供唯一的公共数据源,所有共享的数据都要统一放到 Store的 State 中进行存储. import Vue from 'vue' import Vuex from 'vuex' Vue. ...
- Two Sum:给出一个整数数组,返回两个数的下标值,令其和等于一个指定的目标值 #Leetcode
// Given nums = [2, 7, 11, 15], target = 9, // Because nums[0] + nums[1] = 2 + 7 = 9, // return [0, ...
- Android 自定义View (三)
一.前言 上节 讲解了旋转圆环基本的实现方法.本文将在此基础上进一步改进,在属性文件中自定义控件属性,避免代码中显式调用setXXX() 方法. 二.流程 首先,在资源文件 values 中新建一个 ...
- vmware网络故障处理
1.基本情况,更新vmware后发现联不上ssh了.查看物理机和虚拟机的ip,使用ping命令发现 虚拟机可以ping物理机且有网络 但是物理机是无法ping虚拟机的 2.网络的教程整理了,各有问题, ...
- 6.Vue路由
一.路由的基本概念与原理 路由是一个广义与抽象的概念,路由的本质就是对应关系 在开发中,路由分为: (1) 后端路由 (2) 前端路由 1.1 路由 1. 后端路由(根据不同的URL地址分发不同的资源 ...
- 解决idea xml文件中的中文注释乱码
今天用idea编译xml文件的时候报错了,打开编译好的xml文件发现是中文乱码问题,按照百度上靠前的办法设置了一下,并没有解决乱码问题,在当前项目中直接设置就是不生效,最后删掉编译好的 target/ ...
- POI设置单元格下拉框
一.导出 Excel 单元格设置下拉框 日常开发中,导出基础数据为模版,填充信息后导入时,有时候会要求某些导入项应该为下拉框选择,一个是为了规范数据,也可以简化填充. 1.1 单元格下拉框选项总字符较 ...
- windows音频设备图像隔离audiodg.exe占用内存高(停止与重启audiodg服务)
首先想到的办法是结束该进程,于是在任务管理器里结束进程后,内存是释放了,但是发现发现电脑没有声音去到电脑的system32目录下双击audiodg.exe后任然没有声音解决方法如下(重启audiodg ...
- scrcpy投屏软件
Android很好用得scrcpy 投屏软件: 下载传送门:https://github.com/Genymobile/scrcpy/releases 1.下载解压包后,解压至自己得电脑目录,并复制目 ...