java uppercase方法_java-方法引用
/*** 方法引用格式:
* 双冒号:: 引用运算符,它所在的表达式被称为方法引用。如果Lambda表达式
* 的函数方案已经存在于某个地方的实现中,
* ===》那么可以通过双冒号来引用改方法作为Lambda表达式的代替者*/
例子:
public classDemo01Print {private static voidprintString(Printable p){
p.print("quan");
}public static voidmain(String[] args) {
printString((s)->{
System.out.println(s);
});/*** 表达式的目的:打印参数传递的字符串
* 把参数s,传递给System.out对象,调用out对象的pringln方法进行输出
* System.out对象已经存在
* pringln方法已经存在
* =====》可以使用方法引用来优化表达式
* 就是使用system.out方法直接引用(调用)pringln方法。*/printString(System.out::println);
}
结果输出:
quan
quan
通过对象名引用成员方法
最常见的一种用法,其实就是上面的做法:
/*** 通过对象名引用成员方法
* 前提:
* 对象名存在,方法名存在
* 就可以使用对象名来引用成员方法*/
例子:
1先创建对象类
public classMethodRefObject {public voidpringUpperCaseString(String s){
System.out.println(s.toUpperCase());
}
}
2创建函数式接口
@FunctionalInterfacepublic interfacePrintable {//定义字符串的抽象方法
voidprint(String s);
}
3测试方法:
public classDemo01MethodRefObject {private static voidpringString(Printable p){
p.print("quan");
}public static voidmain(String[] args) {
pringString((s)->{//创建MethodRefObject对象
MethodRefObject obj = newMethodRefObject();//调用对象里面的成员方法pringUpperCaseString把字符//串按照大写输出
obj.pringUpperCaseString(s);
});//使用方法引用优化,先创建MethodObject对象
MethodRefObject obj = newMethodRefObject();
pringString(obj::pringUpperCaseString);
}
}/*** re:
* QUAN
* QUAN
**/
通过类名称引用静态方法
/*** 通过类名引用静态承焰方法
* 前提:
* 类已经存在,静态成员方法存在
**/
例子:
public classDemo01StaticMethodReference {//定义一个方法,方法的参数传递要计算的整数和函数式接口Calcable
private static int method(intnum,Calcable c){returnc.calAbs(num);
}public static voidmain(String[] args) {//调用method方法
int i =method(-10,(n)->{//计算绝对值,使用的是Math类当中的静态方法abs
returnMath.abs(n);
});
System.out.println(i);/***使用方法引用优化Lambda表达式
* Math类存在
* abs计算绝对值静态方法存在*/
int i1 = method(-10,Math::abs);
System.out.println(i1);
}
}
通过supper引用父类的成员方法
存在子父关系
创建一个父类
//父类
public classHuman {public voidsayHello(){
System.out.println("say hello");
}
}
创建一个函数式接口
@FunctionalInterfacepublic interfaceGreetable {voidgreet();
}
创建一个子类:
public class Man extendsHuman{
@Overridepublic voidsayHello() {
System.out.println("hello,I'm Man");
}public voidmethod(Greetable g){
g.greet();
}public voidshow(){
method(()->{//创建父类
Human human = newHuman();
human.sayHello();
});/*** 存在子夫类关系,存在super关键字,代表父类
* 直接通过super调用父类成员方法*/method(()->{super.sayHello();
});/*** 通过super引用类的成员方法*/method(super::sayHello);
}public static voidmain(String[] args) {newMan().show();newMan().sayHello();
}
}
结果:
say hello
say hello
say hello
hello,I'm Man
通过this引用成员方法
this代表当前对象,如果需要引用的方法就是当前类中的成员方法。
可以使用this::成员方法来使用方法引用
定义一个接口
@FunctionalInterfacepublic interfaceRichable {voidbuy();
}
/*** 通过this引用奔雷成员方法*/
public classHusbard {public voidbuyHome(){
System.out.println("买房子");
}public voidmarry(Richable r){
r.buy();
}public voidsoHappy(){
marry(()->{//使用this成员方法
this.buyHome();
});/*** 使用方法引用优化Lambda表达式*/marry(this::buyHome);
}public static voidmain(String[] args) {newHusbard().soHappy();
}
}
类的构造器引用
构造器和类名完全一致,所以使用方式为:类名称::new的格式表示。
定义一个函数式接口
/*** 定义一个创建Person对象的函数式接口*/@FunctionalInterfacepublic interfacePersonBuilder {//根据姓名创建Person对象返回
Person builderPerson(String name);
}
一个要被创建的类Person
public classPerson {privateString name;publicPerson() {
}publicPerson(String name) {this.name =name;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}
}
/*** 类的构造器引用*/
public classDemo {public static voidprintName(String name,PersonBuilder builder){
Person person=builder.builderPerson(name);
System.out.println(person.getName());
}public static voidmain(String[] args) {
printName("quan",(name)->{return newPerson(name);
});/*** 使用方法引用优化lambda表达*/printName("quan2",Person::new);
}
}//re:quan//quan2
数组构造器的引用
数组是Object的子类对象,同样具有构造器,但是语法不太一样
/*** 数组的构造器引用
* 数组::new
* 例子:int[]::new*/
创建一个接口
//创建数组的函数式接口
@FunctionalInterfacepublic interfaceArrayBuilder {//返回一个给定长度的int类型数组
int[] builderArray(intlength);
}
public classDemo1 {public static int[] createArray(intlength,ArrayBuilder ab){returnab.builderArray(length);
}public static voidmain(String[] args) {//调用create方法,传递数组长度和表达式
int[] lenint = createArray(12,(len)->{return new int[len];
});
System.out.println(lenint.length);//优化,int[]就是数组的构造函数名字
int[] lenint2 = createArray(15,int[]::new);
System.out.println(lenint2.length);
}
}//re:12//15
java uppercase方法_java-方法引用相关推荐
- java 方法_Java 方法 | 菜鸟教程
Java 方法 在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢? println() 是一个方法. System 是系统类. out 是标准输出对象. 这句话 ...
- java 返回值_Java方法返回值详解
Java方法返回值详解 每个方法都是为了完成某个特定的功能,例如:登录功能.求和功能等,既然是功能,那么当这个功能完成之后,大多数情况下都会有一个结果的,比如,登录成功了或者失败了(true/fals ...
- java 默认参数_Java 方法的参数可以有默认值吗?
Java 方法的参数可以有默认值吗? 例如 void method(String p1, int p2, bool p3=false); 回答 Java不支持这种特性, 如果你真的有需求,你可以 通过 ...
- java实验楼使用说明_Java 方法
Java 方法 一.实验介绍 1.1 实验内容 本实验将学习Java方法的定义与语法规则.方法重载以及参数与返回值的相关内容. 1.2 实验知识点 方法的定义 方法重载 参数与返回值 1.3 实验环境 ...
- java 面向对象 重载_Java方法重载
在同一类中具有多个具有相同名称的方法称为方法重载.类中具有相同名称的方法可以是声明的方法,继承的方法或两者的组合. 重载方法必须具有不同数量的参数,不同类型的参数或两者.方法的返回类型,访问级别和th ...
- java方法_Java方法
java方法 Java is an Object Oriented Programming language. Java Methods are defined in the class and th ...
- java永久区_Java方法区和永久代
目前有三大Java虚拟机:HotSpot,oracle JRockit,IBM J9. JRockit是oracle发明的,用于其WebLogic服务器,IBM JVM是IBM发明的用于其Websph ...
- java 静态绑定原理_Java方法的静态绑定与动态绑定讲解
一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定.绑定分为静态绑定(前期绑定)和动态绑定(后期绑定). 二:静态绑定 静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的, ...
- java传递实例_Java方法的参数传递机制实例详解
本文实例讲述了Java方法的参数传递机制.分享给大家供大家参考,具体如下: 参数传递机制 对于程序设计语言来说,一般方法(函数)的参数传递有两种:按值传递和按引用传递. 按值传递意味着当将一个参数传递 ...
- java 可变参数方法_Java方法中的参数太多,第7部分:可变状态
java 可变参数方法 在我的系列文章的第七篇中,有关解决Java方法或构造函数中过多参数的问题 ,我着眼于使用状态来减少传递参数的需要. 我等到本系列的第七篇文章来解决这个问题的原因之一是,它是我最 ...
最新文章
- iOS UICollectionView实现瀑布流(3)
- 栈、堆、方法区之间的关系
- 固态硬盘市场或将提前爆发
- python实现序列数据预处理_Python笔记:序列处理函数
- SSM框架——使用MyBatis Generator自动创建代码
- 虚拟机 java 开发_深入浅出 Java 虚拟机 · 通往高级 Java 开发的必经之路
- UI设计配色专辑素材|简易完成色彩协调性!
- iOS底层探索之KVO(四)—自定义KVO
- 调用百度api 生成短网址
- 跑跑卡丁车显示服务器断开连接,win10系统电脑玩跑跑卡丁车出现与服务器断开连接的详细技巧...
- 如何禁用Citrix Receiver硬件加速功能
- 【C++小游戏】推箱子代码+详解
- TCP/IP——从wireshark看TCP(一)
- 中国计算机软件法,计算机软件专利申请中国快律法务攻略.pdf
- icc 颜色 c语言,浅析颜色在icc中四种不同的转换方式
- 群控代理、2016年很火的云豹群控代理
- QPS和TPS的区别
- 手把手教你用图灵机器人做微信公众号自动回复助手
- 接口访问报错:301 Moved Permanently
- 【Unity】入门学习笔记180604——游戏动画设计(1)——概述/精灵对象动画
热门文章
- 153是一个非常特殊的数,它等于它的每位数字的立方和
- 【C语言练习】将100~200之间的素数输出
- pic1路AD转换c语言,pic单片机的ad转换(实例解析)
- Linux内核地址空间为什么1GB,为什么Windows为其系统地址空间预留1Gb(或2 Gb)?
- Django报错:ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。...
- HDU 5919 Sequence II 主席树
- java(eclipse)和数据库(mysql)的连接
- 设计模式(七)适配器模式(Adapter Pattern)
- XAML和VBA 7规范发布
- CSS实现的阴影效果