首页 > 编程知识 正文

java8特性,java8新特性文档

时间:2023-05-03 22:11:11 阅读:188526 作者:1191

前言

Java8已经正式推出3年,但是在实际生产环境中使用的却不是很多。
但Java8是自Java5后最具革命性的版本,这么有革命性的版本我们更需要掌握。
通过系列文章,将Java8的新特性尽量的都介绍清楚。

导航

Java8特性总结(一)概述
Java8特性总结(二)Lambda表达式,函数式接口,方法引用
Java8特性总结(三)接口方法,注解,日期,Base64

数字Java8

195新的文件增加到了JDK8(目前JDK总共4240文件)
93个新类, 89新接口,13新的枚举
2699新方法, 56新的构造函数,49新属性
46接口被注解为@FunctionalInterface(函数式接口)
213接口默认方法
68静态接口方法

Java8的新特性概述 1:Lambda表达式

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

3:接口方法

接口方法很好理解,就是在接口中定义了可以执行的方法。
这个和我们以前的理解完全不一样了。
当然这个函数可以理解成和静态函数相差不多就可以了。

public interface InterfaceMethod{ void test(); default String valueOf(int i) { reutrn String.valueOf(i); }}

这个valueOf就可以在实现里被调用了。
实际上这个仅仅是丰富了Java接口的功能,并不违反面向对象的思想,因为无论怎样,接口还是和抽象类是有很大差距的。

接口定义不了属性的,这个是本质的区别。

4:Concurrency

CompletionStage 一个异步计算的一个阶段对象,当一个阶段执行完成后,会唤起下一个阶段对象的执行。

CompletableFuture(核心)这个类继承了Feature,支持Lambda表达式,支持并行计算,并且是事件驱动。可以等待完成,可以取消等操作。

java.lang.concurrent.atomic这个包下也有一些改动。

5:方法引用

方法的引用

Function<Integer,String> func=String::valueOf;

构造函数的引用

Supplier<String> str=String::new;

实际这都是为了保证函数式接口可以最大的发挥功效。这个我们在后面进行详细的讨论,这个无敌功能。
结合面向对象思想,可以相当灵活的对现有的代码进行重构,以及可以设计相当灵活的实现过程。
发散一点,工作流用这个是不是无敌了。。。。。。

6:并行数组

Arrays中增加了一些方法,使执行的过程采用并行处理,提高处理速度,充分利用多核的优势。

7:HashMap的变化

Java7的HashMap的实现规则是数组+链表,但是在特殊的情况下,就成了链表,严重的影响了查询速度。

因此在Java8这个进行了改变,HashMap编程了数组+链表/红黑树,这个就避免了以前出现的问题,同时保证了执行效率。

8:Stream

这个新增功能太强大了.
可以理解为集合就是一个元素序列,Stream后可以执行各种操作。极大的方便了对集合的操作,因为至少省略了循环。

9:日期

Java日期一直jxdhy,太不好用了,这不Java8改了,但是个人感觉还是一般。。。。。

10: Base64

Base64编码引入了标准包java.util里,使用更方便了。

11:注解的细微变化–重复注解

注解可以声明为数组。
统一个注解可以使用多个。
反射获得注解是一个列表。

@interface Hints { Hint[] value();} @Repeatable(Hints.class)@interface Hint { String value();} 12: jjs

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。