Java学习 day07


项目整体概图

1 Lambda表达式

1.1 概述:只有一个抽象方法的接口


1.2 【比较】lambda表达式、匿名内部类
在这里插入图片描述
1.3 基本语法
(参数)->表达式 或 (参数)->{方法体;}
(1)形参列表
形参列表允许省略形参类型,如形参列表中只有一个参数,形参列表的圆括号也可以省略

(2)箭头(->)
必须通过英文的划线号和大于符号组成
(3)代码块
如果代码块中只包含一条语句,则lambda表达式允许省略代码块的花括号

(4)返回值
如果代码块只有一条return语句,则可以省略return关键字

(5)函数形参
lambda表达式可以直接作为函数的参数

(6)lambda表达式类型
- Lambda表达式的类型(也被称为"目标类型(target type)"),Lambda表达式的目标类型必须是"函数式接口(functional interface)"。
- 函数接口(Java 8新引入的概念),定义:只有一个显示声明抽象方法的接口
- 函数接口通常使用@FunctionalInterface标注出来 (也可以不标记),函数式接口可以包含多个default或static方法,但是只能声明一个抽象方法,@FuctionalInterface主要作用就是检查当前接口是不是函数接口
- 若想使用lambdaname目标必须是一个函数接口
(7)lambda表达式中变量的使用
如果是全局的变量直接用,如果是局部变量会被默认在前面添加final(被作为常量,类似于局部变量在局部内部类中使用的情况)

1.4 【样例】

import org.junit.Test;

public class Demo2 {
	public static void main(String[] args) {
		fun();
	}
	
	//@Test
	public static void fun() {
		//1.没有参数的
		InterA a = ()->{
			System.out.println("没有参数");
		};
		a.showA();
		//简化
		InterA aa = ()->System.out.println("没有参数");
		aa.showA();
		//2.一个参数的
		InterB b = (ib)->{
			System.out.println("一个参数:"+ib);
		};
		b.showB(4);
		//简化
		InterB bb = (ib)->System.out.println("一个参数:"+ib);
		bb.showB(5);
		//3.两个参数的
		InterC c = (ia,ib)->{
			int sum = ia+ib;
			System.out.println("两个参数:"+" ia:"+ia+"   ib:"+ib+"    sum:"+sum);
		};
		c.showC(4, 6);
		//简化
		InterC cc = (ia,ib)->System.out.println("两个参数:"+" ia:"+ia+"   ib:"+ib);
		cc.showC(4, 5);
		//4.返回值
		InterD d = (i,j)->{
			int sum = i+j;
			//System.out.println("sum:"+sum);
			return sum;
		};
		int value = d.showD(4, 6);
		System.out.println(value);
		//简化  简化版的不需要写return 
		InterD dd = (i,j)->i+j;
		int value1 = dd.showD(4, 7);
		System.out.println(value1);
		
		//5.lambda表达式作为参数
		fun2(
				new InterC() {public void showC(int a, int b) {}}
			);
		fun2((i,j)->System.out.println("lambda表达式作为参数"+" i:"+i));
		
		//7.lambda表达式中变量的使用
		String value11 = "hello world";
		InterA aaa = ()->{
			System.out.println(value11);
			//value11是final类型的是一个常量,值是不能改变的
			//value11 = "haha";
		};
		aaa.showA();
	}
	
	public static void fun2(InterC c) {
		c.showC(4, 6);
	}
}

interface InterA{
	public void showA();
}
interface InterB{
	public void showB(int a);
}
interface InterC{
	public void showC(int a,int b);
}
interface InterD{
	public int showD(int a,int b);
}
@FunctionalInterface
interface InterE{
	public int showD(int a,int b);
	//public int showY(int a,int b);
}

1.5 方法引用与构造器引用
1.5.1 引用类方法

1.5.2 引用特定对象的实例方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值