# javanewfeature **Repository Path**: forevertiantian/javanewfeature ## Basic Information - **Project Name**: javanewfeature - **Description**: jdk各个版本新特性示例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-06 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java new feature #### 介绍 jdk各个版本新特性示例 #### Java8 -- Lambda表达式 Java 8 中增加的“语法糖”(指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。 通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会)。 使用`() -> {}` 代替匿名类 几种写法 - `(params) -> expression` - 形参使用`()`包含,单个形参可以省略`()` - 如果参数的类型可以根据上下文推断出来,则可以省略掉类型 - `(params) -> { statements; }` - statements只有一句的可以省略`{}`以及句末的`;` 示例:`com.xingjiejian.feature.lambda` 1. Demo1:使用Lambda表达式替代匿名类--线程示例 2. Demo2:使用Lambda表达式进行事件处理--Swing API 3. Demo3:使用Lambda表达式增强版Comparator和排序 4. Demo4:使用Lambda表达式对列表进行迭代和方法引用 5. Demo5:使用lambda表达式和函数式接口Predicate 6. Demo6:在Stream的map()方法中使用Lambda表达式 #### Java8 -- 方法引用 - 方法引用通过方法的名字来指向一个方法。 - 方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 - 方法引用使用一对冒号 `::` 示例: - `com.xingjiejian.feature.function` - `Supplier` 函数式接口 - `TestMethodReferences` 演示4种不同的方法引用 1. 构造器引用:`Class::new` or `Class< T >::new` 2. 静态方法引用:`Class::static_method` 3. 特定类的任意对象的方法引用:`Class::method` 4. 特定对象的方法引用:`instance::method` #### Java8 -- 函数式接口 - 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 - 函数式接口可以被隐式转换为 lambda 表达式。 - **提醒**:加不加 `@FunctionalInterface` 对于接口是不是函数式接口没有影响,该注解只是提醒编译器去检查该接口是否仅包含一个抽象方法 示例1:函数式接口结合方法引用 `com.xingjiejian.feature.function.Supplier` 示例2:定义了一个函数式接口如下: ```java @FunctionalInterface interface GreetingService { void sayMessage(String message); } ``` 那么就可以使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的): `GreetingService greetService = message -> System.out.println("Hello " + message);` JDK 1.8 之前已有的函数式接口: - `java.lang.Runnable` - `java.util.concurrent.Callable` - `java.security.PrivilegedAction` - `java.util.Comparator` - `java.io.FileFilter` - `java.nio.file.PathMatcher` - `java.lang.reflect.InvocationHandler` - `java.beans.PropertyChangeListener` - `java.awt.event.ActionListener` - `javax.swing.event.ChangeListener` JDK 1.8 新增加的函数接口: - `java.util.function`