JDK1.8新特性(Lambda与接口默认方法)

简单说下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使用的都是函数式接口(即有且只有一个抽象方法的接口)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值