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

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