Java8 新特性概述(60%)

来源:互联网 发布:淘宝产品市场调查表 编辑:程序博客网 时间:2024/06/01 18:27

摘要: Java8在2014年已经发布,现在已经逐渐被广大开发者所认同,越来越多的框架选用,越来越多的公司选择Java8,经过一段时间的学习,发现Java的一些改动值得学习。

特性简介

  • 速度更快
    Java8优化了垃圾回收机制,对底层的内存结构进行了升级,永久区被移除,用元空间代替(直接使用物理内存,而不是分配内存,OOM异常减少),MaxPremGenSize使用MaxMetaspaceSize。Java8对底层的数据结构了进行了改善,例如HashMap以前的HashMap是数组加链表结构,现在增加了红黑树的结构,使得除了添加数据的操作,其他性能都有改善,在ConcurrentHashMap中使用了CAS算法而弃用了锁分段机制。
  • 代码更少
    使用新的语法,Lambda表达式用更少的代码带来相同的效果。
  • 便于并行
    提供了现成的方法来并行化处理。
  • 减少异常
    优化内存,减少OOM;提供了Optinal接口来处理空对象。

Lambda表达式

Lambda是一个匿名函数,我们可以吧Lamdba表达式理解为一段可以传递的代码。使用Lambda可以写出更简洁、灵活的代码。

例如,我们要比较两个整数的大小,如果使用比较器的话,代码可以这么写:

public void testComparator(){        Comparator<Integer> comparator = new Comparator<Integer>() {            @Override            public int compare(Integer x, Integer y) {                return Integer.compare(x, y);            }        };    }

当使用了Lambda表达式以后,可以这样:

public void testComparatorLam(){        Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);    }

函数式接口

函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method)。Java8在使用Lambda时,需要函数式接口的声明。如果每次使用Lambda表达式都需要自己编写函数式接口,确实有点麻烦。因此就有了四大函数式接口:Consumer, Supplier, Funciton, Predicate

方法引用于构造器引用

Stream API

Steam不同于之前java.io.*包中的数据流,它是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的的聚合操作。

使用stream API可以使复杂的业务逻辑一行代码搞定:

public void test(){    list.stream()        .filter((e) - > stu.getScore > 60)        .limit(3)        .forEach(System.out:println);}

接口中的默认方法与静态方法

新时间日期API