简单说下jdk 1.8的两种新特性,还有很多其他内容,这里不做演示。
1.接口默认方法:
jdk1.8之前,我们知道,接口里面只能有public,并且不能有实现体。但是jdk1.8后就可以有默认方法与静态方法了,就是default与static修饰的方法,并且可以有实现体,代码举例如下:
图可以看出,支持的两种修饰符。
代码:
package com.xingsfdz.demo.util.lambda;
public interface TestLamInfa {
//接口可以添加默认方法
default String say(String str){
System.out.println("接口默认方法:" + str);
return str;
}
//静态方法
static String say1(String str){
System.out.println("接口静态方法:" + str);
return str;
}
}
测试:
package com.xingsfdz.demo.util.lambda;
public class TestLamInfaImpl implements TestLamInfa {
public static void main(String args[]){
TestLamInfa test = new TestLamInfaImpl();
test.say("Hello world");
}
}
作用:对于一些公用的方法,可以写在接口,实现不必再重复去实现,当然,可以按自己要求重写。
二、Lambda表达式
定义以及作用解释说明:Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),简化了开发,其实作用跟内部类的作用类似。比如之前实现数组比较的方法 Arras.sort(数组, 通过内部类实现的比较方法compare);,使用Lambda表达式 Arras.sort(数组, Lambda表达式); Lambda表达式可以自动填上这个尚未实现的方法。
其他很多编程语言都有Lambda表达式,为什么java开始不做这个功能?因为java面向的是对象,且为了简洁明了,之前并未开发这个功能,后来在用户的反馈的竞争趋势下,开放了这个功能。
我们代码直接演示下:-> : 这个符合是推导符
package com.xingsfdz.demo.util.lambda;
public class TestLamInfaImpl implements TestLamInfa, Runnable{
public static void main(String args[]){
TestLamInfaImpl test = new TestLamInfaImpl();
test.run();//传统的 需要手动实现Runnable
testLambda();//Lambda方式,一句话搞定,不需要手动实现Runnable接口(函数式接口,隐式实现)
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("传统写法的实现Runnable接口的线程");
}
//语法格式一:无参数,无返回值的方式,还有别有参有返回值的方式
public static void testLambda(){
Runnable runnable = () ->System.out.println("Lambda方式启动线程");
runnable.run();
}
}
注意:Lambda使用的都是函数式接口(即有且只有一个抽象方法的接口)