关于java8的特性中方法引用 类名::静态方法名 或 对象::方法名 和构造器引用 类名::new 的理解

方法引用和构造器引用最终是编译器会创建应该匿名对象赋值给函数接口。我一开始认为的是创建一个ThreadTest实例然后赋值给Thread构造器参数,其实并不是。

对于ThreadTest::new正确的理解是:编译器会帮我们创建一个函数接口的匿名的对象实现了函数接口,实现的方法就是函数接口里的唯一的那个方法,编译器直接在实现的方法里调用构造器方法,然后将创建的匿名对象赋值给参数。如下所示:

 

 像上面这些代码最后的执行结果是空的 

 而不是输出11111,因为将ThreadTest的构造器赋值给了new Thread()里的Runnable参数,

如果想要正确的输出11111,代码应该是

 最终的运行结果:

 就能正确的输出。

posted @ 2023-01-11 21:02  L--Lawliet  阅读(62)  评论(0)    收藏  举报