jdk8带来了哪些新特性

Posted youxin2012

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk8带来了哪些新特性相关的知识,希望对你有一定的参考价值。


jdk8距离发布已经有些时间了,集团内部也在大力推广,恰值新项目也选用了jdk8做开发,查阅下资料做个小结。
较之与前几个版本,jdk8最大的改变莫过于引入了lambda表达式以及stream机制。
新特性如下:
1. 语言层面
1)lambda表达式与函数接口
lambda表达式(闭包)允许将一个函数当作方法的数据(传递函数)或者说把代码当作数据。代码更加简洁紧凑。 详细示例后文描述。
函数接口:为兼容现有功能,使其可转换为lambda表达式,提出函数接口概念。函数接口只有一个抽象方法的接口(可以有多个默认方法或者静态方法),可转换为lambda表示式。通过注解@FunctionalInterface说明。
2)方法引用
他人的示例
第一种方法引用是构造方法引用,语法是:Class::new ,对于泛型来说语法是:Class ::new,请注意构造方法没有参数: 

final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );

第二种方法引用是静态方法引用,语法是:Class::static_method请注意这个静态方法只支持一个类型为Car的参数。

cars.forEach( Car::collide );

第三种方法引用是类实例的方法引用,语法是:Class::method请注意方法没有参数。

cars.forEach( Car::repair );

最后一种方法引用是引用特殊类的方法,语法是:instance::method,请注意只接受Car类型的一个参数。

final Car police = Car.create( Car::new );
cars.forEach( police::follow );

3)接口中支持默认方法与静态方法
默认方法不同于抽象方法,可保证原应用的兼用型(抽象方法必须后实现类去实现;默认方法实现类可以继承,也可以override)。关键字 default,static

public interface DefaultableFactory  

static Defaultable create(Supplier<Defaultable> supplier) 
    return supplier.get();


default String defaultFunction() 
    return "it's defaultFunction";


void abstractFunction(); 

4)同一个声明处支持重复注解;注解支持类型更加广泛
5)方法参数反射
2. 集合库
1)引入stream机制以支持函数编程,允许集合对象中的大量操作,如串行或者并行的map-reduce转换 

roster
.stream()
.filter(
    p -> p.getGender() == Person.Sex.MALE
        && p.getAge() >= 18
        && p.getAge() <= 25)
.map(p -> p.getEmailAddress())
.forEach(email -> System.out.println(email));  

2)hashmap性能优化
3. 安全性
4. 工具
jdeps: 用于包或者类级别文件依赖关系分析
5. 时间与日期
新的java.time包包含了所有关于日期、时间、日期时间、时区、Instant(跟日期类似但精确到纳秒)、duration(持续时间)和时钟操作的类。
6. Nashorn javascript 引擎
7. io,nio
8. 并发
1)java.util.concurrent.ConcurrentHashMap包使用stream机制以及lambda表达式支持聚合操作
2)新增java.util.concurrent.locks.StampedLock 做读写锁
9. hotSpot
移除永生代,使用metaspace
JVM参数 -XX:PermSize 和 –XX:MaxPermSize被XX:MetaSpaceSize 和 -XX:MaxMetaspaceSize代替 

其他特性及示例后续补上

以上是关于jdk8带来了哪些新特性的主要内容,如果未能解决你的问题,请参考以下文章

女同事问我JDK8以后有哪些新特性?给我整不会了

女同事问我JDK8以后有哪些新特性?给我整不会了

JDK8到JDK17有哪些吸引人的新特性?

Jdk8的新特性

Java教程JDK14新特性详解 有哪些值得关注的?

Node.js 8.5 带来哪些新特性