Java小白学习指南【day23】---Java8的新特性

1、接口中的成员

1、成员变量:默认是由public static final修饰

2、抽象方法:默认是有public abstract修饰,并且没有方法体

3、默认方法:由default修饰,实现类对象.方法名();并且可以不需要进行复写,直接调用

4、静态方法:由static修饰,调用:接口名.方法名(实参);,同时注意,静态方法不能被子接口继承同时也不能被实现类重写以及直接调用

2、函数式接口

定义:接口中有且只有一个抽象方法,但是可以有多个非抽象方法,通过@FunctionalInterface进行标记

@FunctionalInterface
public interface FunctionalInterfacePra {
    
    
	//抽象方法
	void get();
	//静态方法
	public static void test1(){
    
    }
	//默认方法
	public default void test2(){
    
    }
}

3、lambda表达式

前提:使用lambda时,接口必须是函数式接口

//语法
函数式接口  变量名 = (参数1,参数2...) -> {
    
    
                    //方法体
     }

好处:1、使代码更加整洁

2、会将重点放在方法体上

3、不会产生新的字节码文件

lambda表达式简写的要求:

1、=右边的类型会根据左边的函数式接口类型自动推断;
2、如果形参列表为空,只需保留();
3、如果形参只有1个,()可以省略,只需要参数的名称即可;
4、如果执行语句只有1句,且无返回值,{}可以省略,若有返回值,则若想省去{},则必须同时省略return,且执行语句也保证只有1句;
5、形参列表的数据类型会自动推断;
6、lambda不会生成一个单独的内部类文件;
7、lambda表达式若访问了局部变量,则局部变量必须是final的,若是局部变量没有加final关键字,系统会自动添加,此后在修改该局部变量,会报错;

在lambda中引用构造方法:

//语法
类名::new//会根据抽象方法的形参顺序,自动在给定的类中寻找构造方法进行匹配
相当于:() -> {
    
    }

在lambda中引用静态方法:

//语法
类名::静态方法名;
相当于:() -> {
    
    }
public class LambdaTest {
    
    
	@Test
	public void testName() throws Exception {
    
    
		List<Object> arrayList = new ArrayList<>();
		arrayList.add("张三");
		arrayList.add("张三2");
		arrayList.add("张三3");
		arrayList.forEach(System.out::println);
	}
}

猜你喜欢

转载自blog.csdn.net/WLK0423/article/details/109813353