lambda表达式(JAVA小白进阶day08)

lambda表达式
1、针对函数式接口编程:接口中只有一个抽象方法,
把方法通过匿名类实现的方式简化成一个表达式的写法 lambda表达式
检查函数式接口的注释:@FunctionalInterface
2、() -> {}
()表示形参列表
->符号 goes to
{}表示方法体
3、参数列表数据类型可省
参数列表只有一个参数,{}可省
4、lambda表达式使用
接口中的方法必须与所调用方法参数列表相同,返回值相同
方法归属者::方法名

IDemo4 demo1 = demo::test;//等价于下边这一句
IDemo4 demo2 = (x,y)->demo.test(x,y);


interface Idemo{
	void showMessage(String msg);
}
interface Idemo2{
	int max1(int x,int y);
}
public class Demo07240105 {
	public static void main(String[] args) {
		Idemo demo = System.out::println;
		demo.showMessage("tdrfg");
		Idemo2 demo2 = Math::max;
		System.out.println(demo2.max1(1,9));
	}
}

5、lambda对构造方法的引用
类名::new
保证参数个数、类型,函数返回值相同

interface Demo5_1{
	Student11 getStudent11();
}
interface Demo5_2{
	Student11 getStudent11(String name, int age);
}
public class Demo07240106 {
	public static void main(String[] args) {
		Demo5_1 d1 = ()-> new Student11();
		Demo5_1 d2 = Student11::new ;//与上行表示意思一致
		d2.getStudent11();
		d1.getStudent11();
	}
}
public class Student11 {
	private String nameString;
	private int age;
	public Student11() {
		System.out.println("no param");
	}
	public Student11(String nameString ,int age) {
		this.nameString = nameString;
		this.age = age;
		System.out.println(""+nameString+age);
	}
}

<<<<<<<复习>>>>>>>
abstract:
1、可修饰方法(抽象方法)
2、特点:没有方法体
3、抽象类
4、特点:不是创建对象
5、抽象类中可以没有抽象方法
6、抽象类要有子类,有子类创建对象->实现所有的抽象方法
若没有实现抽象方法,表示为抽象类
interface
1、定义接口:
class换成interface
interface 接口名{
变量:int x =10;//默认public static final
方法:抽象方法:默认访问修饰符public abstract
普通方法:jdk8之后可定义default或static
}
使用:由实现类实现接口implements -> 实现接口中的所有方法
2、函数式接口:接口自由一个方法->lambda表达式
3、抽象类和接口的区别
4、内部类
1》类体:于类成员的定义完全相同。
没有static修饰的内部类
outclass.innerclass name
= new outclass().new innerclass();
有static修饰的内部类
outclass.innerclass = new outclass.innerclass();
2》方法
不可以有static修饰
3》匿名类
匿名类可以继承父类,也可以实现接口,可以创建对象
父类类型(/接口类型) 变量名 = new 父类类型(/接口类型)(){
匿名类的类体;
}

你可能感兴趣的:(lambda表达式(JAVA小白进阶day08))