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 两种实现方式:

  1. 在接口中定义唯一 一个自定义的抽象方法;
  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新特性后的学习笔记,如想观看详细视频,请点此链接:

http://www.mayikt.com/front/couinfo/201/0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章