您的位置 首页 java

Java8 新特性 详解-来瞅瞅吧

1.主要新特性

Lambda 表达式 – Lambda 允许把函数作为一个方法的参数【函数作为参数传递进方法中】

方法引用 – 方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实例)的方法或 构造器 ,更加紧凑简洁,减少冗余代码

默认方法 – 默认方法就是一个在接口里面有了一个实现的方法

新工具 – 新的编译工具,如:Nashorn 引擎 jjs、类依赖分析器 jdeps

Stream API – 新添加的 Stream API (java.util.stream)把真正的函数式编程风格引入到 Java 中

Date Time API – 加强对日期与时间的处理

Optional 类 – Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常

Nashorn,Java Script 引擎 – Java 8 提供了一个新的 Nashorn javascript 引擎,它允许我们在 JVM 上运行特定的 javascript 应用


2.接口的默认方法

static 方法

1、使用static修饰接 口中的方法并且必须有主体

2、接口的static方法只能够 被接口本身调用;接口名.方法名(…);

3、接口的static方法 不能够被子接口继承;

4、接口的static方 法不能够被实现类覆写及直接调用;


default方法

在接口中可以定义一个使用default修饰有方法体的方法,接口中可以对这个方法提供默认的一种实现。

1、使用default修饰接口中的方法并且 必须 有主体;

2、接口的default方法不能够被接口本身调用,需要接口的 实例(实现类对象)来调用

3、接口的default方法 可以被子接口继承、覆写或者直接调用

4、接口的default方法可以被实现类覆写及直接调用;


在接口中,经过static和default修饰的方法必须有方法体;

static修饰的方法调用方式为类.方法名

default修饰的方法必须是实现类的对象调用

static修饰的方法不能被子接口继承,default修饰的方法可以被子接口继承

并复写方法,就可以创建子接口实现类对象进行调用

使用static和default有什么好处:

Default:类似于抽取,可以多个实现类的统一的业务都抽取到default方法体体实现:


1:接口里写了方法体,所有的实现类和子类都拥有这个方法,都可以调用,不用再每一个都覆写;

2: 我们已经开发好功能了,突然要增加需求,原始的方法:接口定义一个抽象方法,每一个实现去写实现类;现在,使用defaul,可以直接在接口中定义方法体,子类都不用动。


3.函数式接口

函数式接口 就是一个有且仅有一个抽象方法,有且仅有一个抽象方法,但是 Object 类的 public 方法除外,default 和 static 是可以搞的;

JDK 1.8 新增加的函数接口:

java.util.function 此包中包含了很多类,用来支持 Java的 函数式编程

函数式接口注解

@FunctionalInterface

我们在函数式接口上面加上此注解后,里面就只能够有一个抽象方法了,当然不加此注解且只有一个抽象方法的接口也是函数式接口,只是没有限定提示而已。


4.Lambda 表达式

简单的来说,可以看成是对匿名内部类的简写,使用 Lambda 表达式时,接口必须是函数式接口

特点 + 代码案例 :


5.方法引用

静态方法 引用

构造方法 引用

实例方法引用

代码案例:


6.Java 8 Stream

Stream 使用一种类似 SQL 语句 从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象;

这种风格将要处理的 元素集合看作一种流 , 流在管道中传输, 并且可以在管道的节点上进行处理, 比如 筛选, 排序,聚合 等。

常用方法 : 之前文章有代码示例!


7.Optional 实例

以前的判断方式

 <函数式接口>  <变量名> = (参数1,参数2...) -> {
                    //方法体
       }  

引入 Optional 之后

     @Test
    public static String test8(UserPo user){
        // 引入 Optional
        return Optional.ofNullable(user).map(u -> u.getPassword()).orElse("unkonwn");
    }  

8.本地化日期时间 API

Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。

     @Test
    public  void  test9(){
        // 处理时区不是必须的情况    获取当前的日期时间
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("当前时间: " + currentTime);
        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("date1: " + date1);
        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();
        System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds);
        System.out.println("");
        System.out.println("==============================");
        System.out.println("");
        //    使用时区的日期时间API     获取当前时间日期
        ZonedDateTime dd= ZonedDateTime.now();
        System.out.println(dd);
        ZonedDateTime date2 = ZonedDateTime.parse(dd.toString());
        System.out.println("date1: " + date2);
        ZoneId id = ZoneId.of(ZoneId.SHORT_IDS.get("CTT"));
        System.out.println("ZoneId: " + id);
        ZoneId currentZone = ZoneId.systemDefault();
        System.out.println("当期时区: " + currentZone);
    }  

留波关注 ~~~~~ 么么哒

文章来源:智云一二三科技

文章标题:Java8 新特性 详解-来瞅瞅吧

文章地址:https://www.zhihuclub.com/189150.shtml

关于作者: 智云科技

热门文章

网站地图