JDK1.8,Java8新特性
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); } }); /** * * 使用匿名内部类遍历集合 * * @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新特性后的学习笔记,如想观看详细视频,请点此链接: