Java 8新特性
前言
毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本。这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。
本文针对Java开发者经常遇到的几类问题来对Java8新特性进行讲解:
语言
编译器
库
工具
Java虚拟机(JVM)
新特性
1.随着大数据的兴起,函数式编程在处理大数据上的优势开始体现,引入了Lambada函数式编程
2.使用Stream彻底改变了集合使用方式:只关注结果,不关心过程
3.新的客户端图形化工具界面库:JavaFX
4.良好设计的日期/时间API
5.增强的并发/并行API
6.Java与JS交互引擎 -nashorn
7.其他特性
Lambda表达式和函数式接口
什么是Lambda表达式
带有参数变量的表达式,是一段可以传递的代码,可以被一次或多次执行。是一种精简的字面写法,其实就是把匿名内部类中“一定”要做的工作省略掉,然后由JVM通过推导把简化的表达式还原。
Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理。
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
Lamdba表达式很简单,那何时使用呢?
需要显示创建函数式接口对象的地方,都可以使用。实际上函数式接口的转换是Lambda表达式唯一能做的事情。即lambda必须和Functional Interface配套使用。主要用于替换以前广泛使用的内部匿名类,各种回调。比如事件响应器、传入Thread类的Runnable等。
Lambda的优点
1、极大的减少代码冗余,同时可读性也好过冗长的匿名内部类
2、与集合类批处理操作结合,实现内部迭代,并充分利用现代多核CPU进行并行计算。之前集合类的迭代都是外部的,即客户代码。而内部迭代意味着由Java类库来进行迭代,而不是客户代码
和匿名内部类的区别
1、在lambda中,this不是指向lambda表达式产生的那个对象,而是它的外部对象
2、Java 编译器编译 Lambda 表达式并将他们转化为类里面的私有函数,它使用 Java 7 中新加的 invokedynamic 指令动态绑定该方法,但每一个匿名内部类编译器会为其创建一个类文件
Lambda表达式语法
(params) -> expression
or
(params) ->{ statements; }
Lambda表达式特点
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
对接口的要求
虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法
jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用。
- 点赞
- 收藏
- 关注作者
评论(0)