JDK 1.8 新特性 ( 二) ---- 特性汇总
来源:互联网 发布:国内云计算厂商 编辑:程序博客网 时间:2024/06/14 21:00
Java8 新特性:
1、 介绍:
Java8是Java自Java5之后最重要的版本,这个版本包含语言、编译器、库、工具和Jvm等方面的十多个特性
2、 接口的默认方法与静态方法: 扩展接口的声明
a: 默认方法: 允许在已有的接口中添加新方法,而同时又保持了与旧版本代码的兼容性。默认方法与抽象方法不同之处在于抽象方法必须要求实现,但是默认方法则没有这个要求。相反,每个接口都必须提供一个所谓的默认实现,这样所有的接口实现者都默认继承它(如果有必要的话,可以覆盖这个默认实现)
b: 静态方法: 允许添加静态方法,接口的静态方法属于接口类本身,不被继承,也需要提供方法的实现
c: 默认方法和接口方法的方法
静态方法: 接口的类名.方法名
默认方法: 实现类的引用.方法名。默认方法可以被实现类覆盖
public interface IFunctional { void method(String from); default void defaultMethod() { System.out.println("接口默认方法,默认实现..."); } static void staticMethod () { System.out.println("接口静态方法,默认实现..."); }}class Main implements IFunctional { public void method(String from) { System.out.println("Main -> method"); } // 默认方法可以被覆盖 default void defaultMethod() {System.out.println("子类覆盖了接口的默认方法...");} public static void main (String[] args) { // 访问接口的默认方法 Main main = new Main(); main.defaultMethod(); // 访问接口的静态方法 IFunctional.staticMethod(); }}
3、 Lambda作用域
a: 在lambda表达式中访问外层作用域和java之前的匿名类中的方式很相似,可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量
b: 访问局部变量
c: 访问成员变量与静态变量: 与匿名类一致
class Main { public static void main (String[] args) { // final String tag = "abc"; String tag = "dsssss"; // 当lambda表达式调用tag后, tag变量实际上已经隐式的变成final类型的 IFunctional<String, Boolean> fun = s -> s.equals(tag); }}
4、 函数式接口:
a:定义: 只有一个抽象函数的接口,这样的接口可以隐式转换为lambda表达式
例如: runnable comparable comparator
@FunctionalInterface // 如果接口中的函数个数超过1个,则编译器会提示错误。默认方法和静态方法除外public interface IFunctional<T, R> { R handler(T t); default void method1(){} static void method2() {}}
5、引用方法
a: lambda表达式允许使用关键字来传递方法或者构造函数的引用,但要满足某些条件
1. 类(静态)方法的引用
2. 对象方法的引用
3. 构造方法的引用
// 类方法引用public class Main { public static void main(String[] args) { //IFunctional<String, Integer> fun = new IFunctional<String, Integer>() { // @Override // public Integer handler(String s) { // return Integer.parseInt(s); // } //} //IFunctional<String, Integer> fun = s -> { // return Integer.parseInt(s); //} //IFunctional<String, Integer> fun = s -> Integer.parseInt(s); IFunctional<String, Integer> fun = Integer::parseInt; System.out.println(fun.handler("123")); }}// 对象方法的引用public class Main { static String name = new String("aaaa"); public static void main(String[] args) { IFunctional<String, Integer> fun = name::indexOf; fun.handler("c"); }}// 构造方法的引用public class Main { public static void main(String[] args) { // PersonFactory factory = (firstName, lastName) -> new Person(firstName, lastName); PersonFactory factory = Person::new; } static class Person { String firstName; String lastName; public Person (String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } interface PersonFactory { Person create(String firstName, String lastName); } }}
阅读全文
0 0
- JDK 1.8 新特性 ( 二) ---- 特性汇总
- JDK 9新特性汇总
- jdk新特性(二)
- JDK 1.8 新特性
- Open JDK 7 新特性(即JDK 1.8 新特性)
- JDK 1.7 1.8 新特性
- 记录JDK 1.8 新特性
- JDK 1.8 新特性记录
- JDK的新特性
- JDK 7 新特性
- JDK 5.0新特性
- JDK 1.6 新特性
- JDK 5.0新特性
- jdk新特性研究
- JDK 新特性
- jdk新特性资料
- JDK 6.0 新特性
- JDK新特性3
- matplotlib 实战案例详解
- EventBus设计与实现分析——事件的发布
- ios-NSURLConnectionDownloadDelegate
- Java实现Mysql数据库自动备份
- Android 给Retrofit2和OkHttp3添加统一的请求头Header
- JDK 1.8 新特性 ( 二) ---- 特性汇总
- 更新github上的代码
- BitmapUtils
- 【android】menu的使用
- 在新版 Win10 中启用 Linux Bash 环境
- 正则表达式匹配
- Mysql 建表时,日期时间类型选择
- OkHttp3 HTTP请求执行流程分析
- 图像语义分割代码实现(2)