Java8已经正式推出3年,但是在实际生产环境中使用的却不是很多。
但Java8是自Java5后最具革命性的版本,这么有革命性的版本我们更需要掌握。
通过系列文章,将Java8的新特性尽量的都介绍清楚。
Java8特性总结(一)概述
Java8特性总结(二)Lambda表达式,函数式接口,方法引用
Java8特性总结(三)接口方法,注解,日期,Base64
195新的文件增加到了JDK8(目前JDK总共4240文件)
93个新类, 89新接口,13新的枚举
2699新方法, 56新的构造函数,49新属性
46接口被注解为@FunctionalInterface(函数式接口)
213接口默认方法
68静态接口方法
Lambda表达式也可以称为闭包,是Java最关键的变化。
可以简单理解成是匿名类的另一种表现形式(极端匿名类)。
定义个线程:
Lambda表达式形式
Thread tLambda=new Thread(()->System.out.println("I am Lambda"));匿名类形式
Thread t=new Thread(new Runnable(){ @Override public void run() { System.out.println("I am old!"); } }); 2:注解@FunctionalInterface(函数式接口)函数式接口的定义极大增加了Java语言的灵活性,当然推出函数式接口也是为了配合Lambda表达式,使java更好的支持Lambda。
同时由于出现了函数式接口,也衍生了49个函数式接口。
主要集中在java.util.function这个包下面。
包括开发过程经常使用的一些接口也都声明成@FunctionalInterface,如:
Runnable
FileFilter
FilenameFilter
Comparator
Callable
接口方法很好理解,就是在接口中定义了可以执行的方法。
这个和我们以前的理解完全不一样了。
当然这个函数可以理解成和静态函数相差不多就可以了。
这个valueOf就可以在实现里被调用了。
实际上这个仅仅是丰富了Java接口的功能,并不违反面向对象的思想,因为无论怎样,接口还是和抽象类是有很大差距的。
接口定义不了属性的,这个是本质的区别。
4:ConcurrencyCompletionStage 一个异步计算的一个阶段对象,当一个阶段执行完成后,会唤起下一个阶段对象的执行。
CompletableFuture(核心)这个类继承了Feature,支持Lambda表达式,支持并行计算,并且是事件驱动。可以等待完成,可以取消等操作。
java.lang.concurrent.atomic这个包下也有一些改动。
5:方法引用方法的引用
Function<Integer,String> func=String::valueOf;构造函数的引用
Supplier<String> str=String::new;实际这都是为了保证函数式接口可以最大的发挥功效。这个我们在后面进行详细的讨论,这个无敌功能。
结合面向对象思想,可以相当灵活的对现有的代码进行重构,以及可以设计相当灵活的实现过程。
发散一点,工作流用这个是不是无敌了。。。。。。
Arrays中增加了一些方法,使执行的过程采用并行处理,提高处理速度,充分利用多核的优势。
7:HashMap的变化Java7的HashMap的实现规则是数组+链表,但是在特殊的情况下,就成了链表,严重的影响了查询速度。
因此在Java8这个进行了改变,HashMap编程了数组+链表/红黑树,这个就避免了以前出现的问题,同时保证了执行效率。
8:Stream这个新增功能太强大了.
可以理解为集合就是一个元素序列,Stream后可以执行各种操作。极大的方便了对集合的操作,因为至少省略了循环。
Java日期一直jxdhy,太不好用了,这不Java8改了,但是个人感觉还是一般。。。。。
10: Base64Base64编码引入了标准包java.util里,使用更方便了。
11:注解的细微变化–重复注解注解可以声明为数组。
统一个注解可以使用多个。
反射获得注解是一个列表。
jjs是个基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。
13: 类依赖分析器jdeps它可以显示Java类的包级别或类级别的依赖。它接受一个.class文件,一个目录,或者一个jar文件作为输入。jdeps默认把结果输出到系统输出(控制台)上。
14: PermGen空间被移除了PermGen空间被移除了,取而代之的是Metaspace。
JVM选项-XX:PermSize与-XX:MaxPermSize分别被-
XX:MetaSpaceSize与-XX:MaxMetaspaceSize所代替。
http://winterbe.com/posts/2014/03/29/jdk8-api-explorer/
http://ifeve.com/java-8-tutorial-2/
http://www.importnew.com/11908.html
https://www.javacodegeeks.com/2014/05/java-8-features-tutorial.html
http://www.importnew.com/23164.html