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. mysql命令行添加用户并赋予权限

    mysql> create user 'admin'@'%' identified by '123456';Query OK, 0 rows affectedmysql> FLUSH PR ...

  2. TypeScript - 安装,类型

    // 要使用typescript需要全局安装 通过tsc -v 来验证是否安装成功 npm i -g typescript// ts 文件中完全可以写js语法, 完全兼容js // ts 本身在运行时 ...

  3. ES6 - 参数默认值

    1.形参初始值, 具有默认值的参数,一般位置要靠后(潜规则) function add(a,b,c=10){ return a + b + c; } let resutl = add(1,2); // ...

  4. vue 在 v-for 时给每项元素绑定事件需要用事件代理吗?为什么?

    vue本身不做事件代理(react将所有事件都委托到document上,然后进行派发) 普通html元素和在组件上挂了.native修饰符的事件.最终EventTarget.addEventListe ...

  5. 循环3-while语法

    一.介绍和语法 1. while循环方式 while循环语句会对紧跟在while命令后的条件表达式进行判断,如果该表达式成立,则执行while循环里面的命令或语句,每一次执行到done时,会重新判断w ...

  6. ping 请求找不到主机 www.baidu.com

    1.以管理员方式运行cmd 2.输入netsh winsock reset 3.重启电脑 4.如果还是不行,就删除C:\Windows\System32\drivers\etc里面的hosts文件试试 ...

  7. 前端-对js原型继承的简单举例

    function A(name,color){ this.name=name; this.color=color;   } A.prototype.getColor=function(){ retur ...

  8. elementUI table 第一列值相等合并

    效果如下: 首先:在table上加:span-method="spanMethod" 其次: methods中加两个方法 dataPretreatment() { //表格数据列合 ...

  9. MYSQL面试题大汇总

    1.数据库的三大范式是什么 1)列不可再分 2)行可以唯一区分 3)表的非主属性不可以依赖与其他表的非主属性,外键约束 2.数据库中的事务 1)什么是事务:多条sql语句,要么都成功,要么都失败 2) ...

  10. expected expression before')'token

    如上图所示,今天遇到的一个编译问题,明明用法跟其他地方的一摸一样,在主程序里编译就没问题,动态库里死活都编译不过去,可把我折磨死了,最后没办法,只能请教大佬,大佬过来几分钟就找到了问题,真正出错的地方 ...