• 在线客服

  • 扫描二维码
    下载博学谷APP

  • 扫描二维码
    关注博学谷微信公众号

  • 意见反馈

原创 Java8有什么变化?九大新特性

发布时间:2019-08-12 10:06:17 浏览 8080 来源:博学谷资讯 作者:照照

    Java8有什么变化?本文将讲解Java8的九大新特性,它们分别是Java8Lambda 表达式、Java8方法引用、Java8函数式接口、Java 8 默认方法Java8Nashorn、 JavaScript 、Java8Stream、Java8Optional 类、Java8日期时间API、Java8 Base64。

     

    Java8有什么变化

     

    一、Java8Lambda 表达式

     

    Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。用

     

    Lambda 表达式可以使代码变的更加简洁紧凑。

     

    1、语法

     

    lambda表达式的语法格式如下:(parameters) -> expression或(parameters) ->{statements; }

     

    以下是lambda表达式的重要特征:

     

    可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

     

    可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

     

    可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

     

    可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

     

    2、变量作用域

     

    lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在lambda 内部修改定义在域外的局部变量,否则会编译错误。

     

    二、Java8方法引用:

     

    方法引用通过方法的名字来指向一个方法。方法引用可以使语言的构造更紧凑简洁,减少冗余代码。方法引用使用一对冒号 :: 

     

    三、Java8函数式接口

     

    函数式接口(FunctionalInterface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

     

    函数式接口可以被隐式转换为lambda表达式。

     

    函数式接口可以现有的函数友好地支持 lambda。

     

    JDK 1.8之前已有的函数式接口:

     

    java.lang.Runnable

     

    java.util.concurrent.Callable

     

    java.security.PrivilegedAction

     

    java.util.Comp

    arator

     

    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

     

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

     

    四、Java8默认方法

     

    Java 8 新增了接口的默认方法。

     

    简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。

     

    我们只需在方法名前面加个default关键字即可实现默认方法。

     

    为什么要有这个特性?

     

    首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的java 8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。

     

    五、Java8Stream

     

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

     

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

     

    Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

     

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

     

    元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

     

    六、Java8Optional 类

     

    Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

     

    Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

     

    Optional 类的引入很好的解决空指针异常。

     

    七、Java8Nashorn JavaScript

     

    Nashorn 一个 javascript 引擎。

     

    从JDK1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使

     

    用基于JSR292的新语言特性,其中包含在JDK 7中引入的 invokedynamic,将JavaScript编译成Java字节码。

     

    与先前的Rhino实现相比,这带来了2到10倍的性能提升。

     

    八、Java8日期时间API

     

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

     

    在旧版的Java 中,日期时间API 存在诸多问题,其中有:

     

    线程安全:java.util.Date 是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。

     

    设计很差:Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。

     

    java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。

     

    时区处理麻烦:日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。

     

    Java8在java.time:包下提供了很多新的 API。以下为两个比较重要的 API:

     

    Local(本地):简化了日期时间的处理,没有时区的问题。

     

    Zoned(时区):通过制定的时区处理日期时间。

     

    新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。

     

    九、Java8 Base64

     

    在Java8中,Base64编码已经成为Java类库的标准。Java 8 内置了 Base64 编码的编码器和解码器。Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:

     

    基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。

     

    URL:输出映射到一组字符A-Za-z0-9+_,输出是URL和文件。

     

    MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用'\r'并跟随'\n'作为分割。编码输出最后没有行分割。

     

    以上就是Java8变化的就九个新特性,大家都弄清楚了吗?

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: Kotlin与Java相比的优缺点有哪些? 下一篇: 什么是微服务?微服务优缺点分析

相关推荐 更多

热门文章

  • 前端是什么
  • 前端开发的工作职责
  • 前端开发需要会什么?先掌握这三大核心关键技术
  • 前端开发的工作方向有哪些?
  • 简历加分-4步写出HR想要的简历
  • 程序员如何突击面试?两大招带你拿下面试官
  • 程序员面试技巧
  • 架构师的厉害之处竟然是这……
  • 架构师书籍推荐
  • 懂了这些,才能成为架构师
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码