JDK1.8,Java8新特性
一.JDK1.8中接口默认关键字
在Java1.8之前接口中是不允许有普通方法的,在Java1.8后允许接口中有普通方法,只需要加上default关键字即可。
/**
*
* @author: LiShun
* @time: 2020/1/16 13:34
*/
public interface UserService {
/**
* 抽象方法
* 打印User
* @param name 自定义用户名
* @param age 自定义年龄
* @return
* @time: 2020/1/16 13:27
*/
void inputUser(String name,Integer age);
/**
* Java1.8之前是不允许有普通方法的
* Java1.8 现在只需要加上default关键字修饰就可以写方法体了
* @param name 自定义名称
* @param age 自定义年龄
* @return String
* @time: 2020/1/16 14:28
*/
default String inputBoy(String name,Integer age){
return "success";
}
/**
* 在java1.8后可以使用static和default修饰方法后,添加方法体。
*
* @param
* @return String
* @time: 2020/1/16 14:48
*/
static String inputCar(){
System.out.println("hhhhh");
return "car";
};
二.函数式接口
2.1 什么是函数式接口?
接口中只定义了唯一一个自定义的抽象方法,此接口就可以默认称作函数接口。
2.2 两种实现方式:
- 在接口中定义唯一 一个自定义的抽象方法;
- 使用@FunctionInterface注解:目的是为了强制接口只有唯一一个抽象方法,可以存在static、default修饰的普通方法。
public static void main(String[] args) {
/**
* 传统方式
* 使用匿名内部实现接口
* @param name 自定义名称
* @param age 自定义年龄
* @return void
* @time: 2020/1/16 15:27
*/
UserService userService=new UserService(){
@Override
public void inputUser(String name,Integer age){
System.out.println("name:"+name+"...........age:"+age);
}
};
userService.inputUser("命硬",22);
}
/**
* java8的新特性,使用Lambda 简化匿名内部类
* 使用Lambda实现UserService接口
* @param name 自定义名称
* @param age 自定义年龄
* @return void
* @time: 2020/1/16 15:44
*/
UserService userService1 = (name, age) -> {
System.out.println("name:" + name + "..............age" + age);
};
userService1.inputUser("命硬", 22);
使用Lambda简化匿名内部类
public static void main(String[] args) {
/**
* 使用匿名内部类实现线程
*
* @param
* @return void
* @time: 2020/1/16 16:28
*/
Runnable runnable=new Runnable(){
@Override
public void run() {
System.out.println("主线程名称:"+Thread.currentThread().getName());
}
};
new Thread(runnable).start();
/**
* 使用Lambda简化匿名内部类
*
* @param
* @return void
* @time: 2020/1/16 16:29
*/
new Thread(()->{
System.out.println("主线程名称:"+Thread.currentThread().getName());
});
}
遍历集合的三种方式:
ArrayList<String> list = new ArrayList<>();
list.add("小彪子");
list.add("小鹏子");
list.add("小康子");
/**
* 使用匿名内部类遍历集合
*
* @param
* @return void
* @time: 2020/1/16 16:47
*/
System.out.println("使用匿名内部类遍历集合");
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
/**
*
* 使用Lambda表达式遍历集合
*
* @param
* @return void
* @time: 2020/1/16 16:51
*/
System.out.println("使用Lambda遍历集合");
list.forEach((t) -> {
System.out.println(t);
});
/**
*
* 使用方法引用形式遍历集合
* @param
* @return void
* @time: 2020/1/16 16:53
*/
System.out.println("使用方法引用形式遍历集合");
list.forEach(System.out::println);
运行结果:
注:该例子是蚂蚁课堂教学学习JDK1.8新特性后的学习笔记,如想观看详细视频,请点此链接: