内部类
方法内部类:
定义在方法中,作用域仅限于方法内,不能使用任何权限修饰符。方法参数
使用隐式final声明,即方法内部类只能使用方法参数,无法修改。
匿名内部类:
①定义方法中,必须实现一个接口或者继承一个抽象类。
②使用Lambda表达式要求接口中有且只有一个抽象方法。
③JDK8新增注解@FunctionalInterface,只能用于接口声明,
检测当前接口中是否只有一个抽象方法。
Lambda表达式语法:
1. 方法体实现只有一行: () --> 具体实现代码;
2. 方法体有多行实现:
() --> {
方法体实现代码
};
3.方法若有返回值:
a.只有一行代码,return都可以省略
ISubject subject = (r1,r2) -->r1 + r2;
b.方法体有多行代码,此时return不能省略
ISubject subject = (r1,r2) --> {
r1 =r1 + 10;
r2 =r2 + 20;
return r1 + r2;
};
方法引用:一般结合Lambda共同使用
注释:引用的是方法的具体实现
1.引用某个类的静态方法
ISubject< Integer,String> subject = String :: valueof;
//等同于使用String.valueof(10);
StringISubject.switchPara(10);
2.引用某个对象的普通方法
ISubject<String> subject = "hello" ::toUpperCase;
//等同于使用"hello".toUpperCase();
System.out.println(subject.SwitchPara());
3.引用某个类的普通方法
ISubject<Integer,String> iSubject = String :: compareTo();
//等同于使用new String.compareTo("刘","杨");
System.out.println(iSubject.switchPara("刘","杨"));
4.引用某个类的构造方法
ISubject<Person,Integer,String> subject = Person :: new;
//等同于使用 new Person(40,"蛋哥");
Person per = subject.createPerson(40,"蛋哥");
System.out.println(per);