您的位置:首页 > 编程语言 > Java开发

Java8特性总结(一)概述

2017-01-18 14:20 232 查看

前言

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日期一直被诟病,太不好用了,这不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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java