Lambda表达式的标准格式

三要素:形式参数箭头代码块

格式:(形式参数)->(代码块)
形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
->代表指向动作
Lamabda表达式练习1(抽象方法无参无返回值)
//Main.java(测试类)
public class Main{
public static void main(String[] args){
//在主方法中调用useFanxing方法
Fanxing f=new Fanxing();
useFanxing(f); //匿名内部类
useFanxing(new Fanxing(){
public void eat(){
System.out.println("一天一苹果,医生远离我");
}
}); //Lambda表达式
useFanxing(()->{
System.out.println("一天一苹果,医生远离我");
}); // }
private static void useFanxing(Fanxing f){
f.eat();
}
} //Fanxing.java(接口)
public interface Fanxing {
void eat();
} //Eatablelmp.java(类实现接口)
public class Eatablelmp implements Fanxing{
@Override
public void eat(){
System.out.println("一天一苹果,医生远离我");
}
}
Lambda表达式的练习2(抽象方法带参无返回值)
//Main.java(测试类)
public class Main{
public static void main(String[] args){ //匿名内部类
useFlyable(new Flyable(){
@Override
public void fly(String s){
System.out.println(s);
System.out.println("飞机自驾游");
}
}); //Lambda
useFlyable((String s)->{
System.out.println(s);
System.out.println("飞机自驾游");
});
}
//定义一个方法
private static void useFlyable(Flyable f){
f.fly("风和日丽,晴空万里");
}
} //Flyable.java(接口)
public interface Flyable{
void fly(String s);
}
Lambda表达式的练习3(抽象方法带参带返回值)
//Main.java(测试类)
public class Main{
public static void main(String[] args){ //Lambda
useAddable((int x,int y)->{ return (x+y);//控制具体实现 });
} private static void useAddable(Addable a){
a.add(1,100);
} } //Addable.java(接口)
public interface Addale{
int sum=int add(int x,int y);
System.out.println(sum);
}
Lambda表达式的省略模式
//就练习三为例
//1--参数的类型可以省略-----有多个参数的情况下不可以只省略一个 useAddable((x,y)->{
return x+y;//101
}); //如果参数类型仅有一个,那么小括号可以省略 useFlyable(s->{
System.out.println(s);
}); //如果代码块的语句只有一条,可以省略大括号和分号
useFlyable(s->System.out.println(s));
//如果有return,那么return也要省略掉
useAddable((x,y)->x+y);
Lambda表达式的注意事项
//使用Lambda必须要有接口,并且要求接口中1有且仅有一个抽象方法

//使用Lambda必须有上下环境,才能推导出Lambda对应的接口
Lambda表达式和匿名内部类的区别
//匿名内部类--可以是接口、抽象类和具体类
//Lambda只能是接口 //接口中有且仅有一个抽象方法,可以用Lambda表达式,也可以用匿名内部类
//多个抽象方法,只能使用匿名内部类 //匿名内部类--编译之后,产生一个单独的class字节码文件
//Lambda--编译之后,没有产生,对应的字节码会在运行的时候动态生成

接口组成更新

接口组成更新概述

加入了默认方法静态方法私有方法

接口中的默认方法
default--代表默认方法
//public可以省略,default不能省略
接口中的静态方法
static--代表静态方法
//只能通过接口调用
//public可以省略,static不能省略
接口中的私有方法
private
默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法

方法引用

方法引用符::
//Lambda表达式
usePrintable(s->System.out.println(s)); //方法引用
usePrintable(System.out::println);
//二者孪生兄弟
相关应用:
//Main.java
public class Main{
public static void main(String[] args){ //Lambda表达式
usePrintable(s->System.out.println(s)); //方法引用
usePrintable(System.out::println);
}
private static void usePrintable(MyInterface my){
my.show("12345678910");
}
} //MyInterface.java(接口)
public interface MyInterface {
void show(String s);
}
Lambda表达式支持的方法引用
1、引用类方法
//格式:类名::静态方法
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
useConverter(s-> Integer.parseInt(s)); //引用类方法
useConverter(Integer::parseInt);
}
private static void useConverter(Converter c){
int num=c.converter("123");
System.out.println(num);
} } //Converter.java
public interface Converter {
int converter(String s);
}
引用对象的实例化方法
//格式:对象::成员方法
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
usePrinter(s-> System.out.println(s.toUpperCase())); //引用方法
printString ps=new printString();
usePrinter(ps::printerUpper);
} private static void usePrinter(Printer p){
p.printUpperCase("a");
}
} //Printer.java
public interface Printer {
void printUpperCase(String s);
} //printString.java
public class printString {
public void printerUpper(String s){
String result=s.toUpperCase();
System.out.println(result);
}
}
引用类的实例方法
//引用类中的成员方法
//格式:类名::成员方法
相关应用:
//Main.java
public class Main{
public static void main(String[] args){
useMyString((String s,int x,int y)->{
return s.substring(x,y);//截取部分字符串
}); useMyString((s,x,y)->s.substring(x,y)); //引用方法
useMyString(String::substring);
} private static void useMyString(MyString mm){
String s=mm.mySubString("helloworld",1,6);
System.out.println(s);
}
} //MyString.java
public interface MyString {
String mySubString(String s,int x,int y);
}
引用构造器
//格式:类名::new

相关应用:
//Main.java
public class Main{
public static void main(String[] args){
useStudentBuilder((String name,int age)->{
//Student s=new Student(name,age);
//return s;
return new Student(name,age);
}); useStudentBuilder((name,age)->new Student(name,age)); //引用方法
useStudentBuilder(Student::new); } private static void useStudentBuilder(StudentBuilder sb){
Student s=sb.Build("lili",19);
System.out.println(s.getName()+" "+s.getAge());
} } //StudentBuilder.java
public interface StudentBuilder {
Student Build(String name,int age);
} //Student.java
public class Student{
private String name;
private int age; public Student(String name,int age){
this.name=name;
this.age=age;
}
public void setName(){}
public void setName(String name) {
this.name = name;
}
public void setAge(){}
public void setAge(int age){
this.age=age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}

Java笔记第十二弹的更多相关文章

  1. Java笔记(十二) 文件基础技术

    文件基础技术 一.文件概述 一)基本概念 1.文件的分类: 1)文本文件:文件中每个二进制字节都是某个可打印字符的一部分.如.java文件 2)二进制文件:文件中每个二进制字节不一定用来表示字符,也可 ...

  2. 菜鸡的Java笔记 第二十二 - java 对象多态性

    本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的,        而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...

  3. 菜鸡的Java笔记 第十二 - java 构造方法与匿名对象

    1.点    构造方法的作用以及定义要求    匿名对象的使用    构造方法:        只要出现()的都表示方法        构造方法就是类构造对象时调用的方法,主要用来实例化对象.> ...

  4. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  5. OllyDbg 使用笔记 (十二)

    OllyDbg 使用笔记 (十二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1eQiV6aI 安装好程序 ...

  6. Java设计模式(十二) 策略模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...

  7. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  8. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  9. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

  10. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

随机推荐

  1. python爬虫实战——自动下载百度图片(文末附源码)

    用Python制作一个下载图片神器 前言 这个想法是怎么来的? 很简单,就是不想一张一张的下载图片,嫌太慢. 在很久很久以前,我比较喜欢收集各种动漫的壁纸,作为一个漫迷,自然是能收集多少就收集多少.小 ...

  2. 视觉里程计1-SLAMCP7

    --20.11.27 在CP2里面讲到,视觉SLAM主要分为视觉前端以及优化后端,后端也被称为视觉里程计(VO).根据相邻图像的信息,估计粗略的相机运动,给后端提供较好的初始值.VO的实现方法按是否需 ...

  3. git-开发常用命令

    1.本地克隆代码 git clone http地址 2.查看所有分支 git branch -a remotes/origin开头 :远程分支 3.切换分支 git checkout 分支名 4.删除 ...

  4. python机器学习——KNN(K近邻算法)

    背景与原理: KNN算法其实是逻辑最简单的分类算法--我们认为一个数据的类型是由与其最接近的数据决定的,而"接近"实际上就是我们度量两个数据点之间的距离,如果我们把一组数据看做一个 ...

  5. ssh scp 相关

    1. 设置ssh 的免密登录 1> 将 ~/.ssh/id_rsa.pub文件中的内容拷贝到 远程host的 ~/.ssh/authorized_keys文件中 2> ssh-copy-i ...

  6. 服务器性能测试工具ab

    ab指令 ab -n 1000 -c 20 http://127.0.0.1/

  7. Spring系列之验证-14

    目录 Java Bean 验证 Bean 验证概述 配置 Bean 验证提供程序 注入验证器 配置一个`DataBinder` Spring MVC 3 验证 Java Bean 验证 Bean 验证 ...

  8. 第17章 使用日志记录监视和排除错误(ASP.NET Core in Action, 2nd Edition)

    第3部分 扩展应用程序 我们在第1部分和第2部分中介绍了大量内容:我们查看了您将用于构建传统服务器渲染的 Razor Pages 应用程序以及 Web API 的所有主要功能组件.在第3部分中,我们将 ...

  9. python实现录屏功能(亲测好用)

    更新时间:2020年03月02日 13:59:52 作者:linnahan https://www.jb51.net/article/181757.htm import time,threading ...

  10. maya灯光导入houdini插件开发——技术文档

    如果想了解插件开发流程的话,可以参考我另外一篇文章maya灯光导入houdini插件开发 插件下载地址 接下来我将说明怎么使用这插件(因为之前写过技术文档,所以也懒得再写一份了,直接照搬上来) 1.插 ...