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新特性後的學習筆記,如想觀看詳細視頻,請點此鏈接: