当前位置: 首页 > 图灵资讯 > 技术篇> Java8有什么变化?九大新特性

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

来源:图灵教育
时间:2023-02-19 09:59:45

  java8有什么变化?本文将讲解Java8的九个新特点,即Java8Lambda表达式、Java8引用方法、Java8函数接口、Java8默认方法、Java8Nashorn、JavaScript、Java8Stream、Java8optional。

Java8有什么变化?

  一、Java8Lambda表达式。

  Lambda表达式,也称为闭包,是促进Java8发布的最重要的新特征。Lambda允许函数作为方法的参数(函数作为参数传输到方法中)。

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

  1.语法

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

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

  可选类型声明一识别参数值,无需声明参数类型。

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

  大括号:如果主体包含一个句子,则不需要使用大括号。

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

  2.变量作用域。

  lambda表达式只能引用标有final的外部局部变量,即lambda内部不能修改定义在域外的局部变量,否则会编译错误。

  引用Java8方法:

  该方法通过该方法的名称引用该方法。该方法的引用可以使语言结构更加紧凑和简减少冗余代码。该方法引用了一对冒号:

  三、Java8函数接口。

  函数接口(Functionalinterface)是一种只有一种抽象方法的接口,但可以有多种非抽象方法。

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

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

  JDK1.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。

  JDK1.8新增函数接口:

  java.util.function。

  Java.util.function包含多种类型,用于支持Java的函数编程。

  四、Java8默认方法。

  Java8增加了接口默认方法。

  简单来说,默认方法是界面可以实现,不需要实现类来实现。

  只需在方法名前添加default关键字即可实现默认方法。

  为什么要有这个特点?

  首先,之前的界面是一把双刃剑,其优点是抽象而不是特定的编程。缺点是,当需要修改界面时,需要修改所有实现界面的类别。目前,java8之前的集合框架没有foreach方法。通常,可以想到的解决方案是在JDK中为相关界面添加新的方法和实现。然而,对于已发布的版本,在不影响现有实现的情况下,不能在不影响现有实现的情况下添加新的方法。因此,引入默认方法。其目的是解决接口修改与现有实现不兼容的问题。

  5.Java8Stream。

  Java8API添加了一种新的抽象,称为流Stream,可以让您以声明的方式处理数据。

  Stream利用SQL语句从数据库查询数据的直观方式,为Java集合运算和表达提供高级抽象。

  StreamAPI可以大大提高java程序员的生产力,让程序员写出高效、干净、简洁的代码。

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

  元素流在管道中,经过中间操作(intermediateoperation)处理,最终通过最终操作(terminaloperation)获得前处理结果。

  六、Java8optional类。

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

  Optional是一个容器:它可以保存类型T的值,或者只保存null。Optional提供了许多有用的方法,这样我们就不需要显式的空值检测。

  引入Optional类可以很好地解决空指针异常。

  7.Java8NashornJavaScript。

  javascript引擎Nashorn。

  从JDK1.8开始,Nashorn取代Rhino(JDK1.6、JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript5.1规范和一些扩展。

  基于JSR292的新语言特征,包括JDK7引入的invokedynamic,将JavaScript编译成Java字节码。

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

  8.Java8日期API。

  Java8通过发布新的Date-TimeAPI(JSR310)来进一步加强对日期和时间的处理。

  在旧版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(时区):通过制定时区。