文章目录
一、格式解读
方式1的代码启动线程输出,方式2以匿名内部类改进,方式3以Lambda表达式的方式改进,让代码更优雅。
1.Lambda的标准格式
匿名内部类中重写run()
方法代码解析——红框部分:方法形式参数为空,不需要传递参数;方法返回值类型为viod
,无返回值;方法体中的内容是具体要做的事情。
Lambda表达式的代码解析:
()
:里面没有内容,可看为方法形式参数为空;
->
:用箭头指向后面要做的事情;
{}
:代码块,可看为方法体中的内容;
组成三要素:形式参数、箭头、代码块。
格式:( 形式参数 ) -> { 代码块 }
,如多个参数,用逗号隔开,无参数则留空。
二、Lambda表达式之抽象方法
1. 无参无返回值
使用前提:
1:有一个接口
2:接口中有且仅有一个抽象方法
方式一:
方式二:
方式三:
2. 带参无返回值
方式一:
方式二:
3. 带参带返回值
三、Lambda表达式的省略模式
1. 形式参数的类型书写可省略。
2. 参数有且仅有一个,小括号可省略。
3. 代码块中语句只有一条,大括号和分号可省略。
四、注意事项
1.大括号和分号可省略,并要求有接口,且接口有且仅有一个抽象方法
2.使用Lambda表达式,必须有上下文环境,才能推导出Lambda对应的接口。
单独写程序不认识,因为没有上下文环境。
可赋值给一个接口,它可根据局部变量的类型来推导Lambda表达式对应的接口。
它根据构造方法的参数来推断得知Lambda表达式对应的接口。
五、Lambda表达式和匿名内部类的区别
前景提要:
区别一:
匿名内部类的形式可以
实现方法参数为接口
的调用。
匿名内部类的形式可以
实现方法参数为抽象类
的调用。
匿名内部类的形式可以
实现方法参数为具体类
的调用。
Lambda表达式可以
实现方法参数为接口
的调用。
Lambda表达式不可以
实现方法参数为抽象类
的调用。
Lambda表达式不可以
实现方法参数为具体类
的调用。
区别二:
接口中有且仅有一个抽象方法,可以使用匿名内部类或Lambda表达式。
接口中有两个及其以上的方法,可以使用匿名内部类,但是不能使用Lambda表达式。
区别三:
实现原理不同:(查看字节码文件)
Lambda: 没有更多的字节码文件生成。
匿名内部类: 多了一个字节码文件。
匿名内部类:会产生单独的字节码文件,Lambda:不会产生单独的字节码文件(运行时动态生成)。
—————————————————————————————————————————
总结: