匿名内部类与lambda表达式
- 匿名内部类, 简言之,是指没有名称的java类,它可以通过继承父类或者实现接口来进行编程。
通常我们这么去操作:
父类/接口 对象名称=new 父类/接口(){
继承父类的方法或者实现接口的方法
}
- lambda表达式,简言之,是JDK1.8的新特性,是从匿名内部类发展而来的。我们可以理解它就是函数式接口的实例。
下面我写了一些代码来进行试验:
实例代码:JDK1.8之前的匿名内部类的写法
//JDK8之前的匿名内部类的写法
static void lambdaJdk8Down(){
Runnable runnableJdk8down=new Runnable() {
@Override
public void run() {
System.out.println("JDK8前 这个方法是JDK8之前的匿名内部类....");
}
};
new Thread(runnableJdk8down).start();
}
实例代码:
JDK8之后的lambda表达式加上匿名内部类的写法(lambda表达式不含参的写法)
static void lambdaJdk8Up(){
Runnable runnableJdk8up=()->
System.out.println("JDK8后 这个方法是JDK8之后的lambda写法(不含参数)...");
new Thread(runnableJdk8up).start();
}
实例代码:
JDK8之后的lambda表达式加上匿名内部类的写法(lambda表达式含参的写法)
static void lambdaJdk8UpPramas(StringUserAndName userAndName){
System.out.println("含参数 函数式接口执行之前打印..."); //打印顺序1
String plus = userAndName.plus("上官云溪", "25"); //打印顺序3
System.out.println("含参数 函数式接口执行之后打印..."); //打印顺序2
System.out.println(plus);
}
StringUserAndName为函数式接口:
package com.fdd.lambda;
public interface StringUserAndName {
String plus(String name,String age);
}
注意:这里我们要知道,含参数的lambda表达式执行顺序为:先执行方法内部代码,再执行函数式接口的方法。
我们将以上实例代码放入主函数中启动查看结果:
package com.fdd.lambda;
public class LambdaTest {
public static void main(String[] args){
lambdaJdk8Down();
lambdaJdk8Up();
lambdaJdk8UpPramas((String name,String age) -> {
return "JDK8后 这个方法是JDK8之后的lambda写法(含参数)...姓名="+name+",年龄="+age;
});
}
//JDK8之前的匿名内部类的写法
static void lambdaJdk8Down(){
Runnable runnableJdk8down=new Runnable() {
@Override
public void run() {
System.out.println("JDK8前 这个方法是JDK8之前的匿名内部类....");
}
};
new Thread(runnableJdk8down).start();
}
//jdk8之后的lambda表达式加上匿名内部类的写法(lambda表达式不含参的写法)...
static void lambdaJdk8Up(){
Runnable runnableJdk8up=()->
System.out.println("JDK8后 这个方法是JDK8之后的lambda写法(不含参数)...");
new Thread(runnableJdk8up).start();
}
//jdk8之后的lambda表达式加上匿名内部类的写法(lambda表达式含参的写法)...
//(此方法先执行方法内部代码,再执行函数式接口的方法)
static void lambdaJdk8UpPramas(StringUserAndName userAndName){
System.out.println("含参数 函数式接口执行之前打印..."); //打印顺序1
String plus = userAndName.plus("上官云溪", "25"); //打印顺序3
System.out.println("含参数 函数式接口执行之后打印..."); //打印顺序2
System.out.println(plus);
}
}
console results info:

总结:
1、匿名内部类就是没有名称的java类,通过继承父类或者实现接口来进行创建。
2、Lambda表达式是JDK在1.8之后的新特性。
3、Lambda表达式本质是抽象父类或者函数式接口的实例。
4、Lambda表达式的执行顺序是先执行方法中的代码逻辑,再执行接口或者父类中的代码逻辑。
本文介绍了匿名内部类的基本概念,即无名的Java类,通常用于继承父类或实现接口。接着详细探讨了JDK1.8引入的lambda表达式,它是匿名内部类的发展,特别是作为函数式接口的实例。通过实例代码展示了JDK1.8之前匿名内部类的用法,以及JDK1.8之后lambda表达式的两种形式(无参和含参)。最后,强调了lambda表达式执行顺序:先执行内部代码,再执行接口或父类中的方法。
1275

被折叠的 条评论
为什么被折叠?



