前言

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(){@Overridepublic 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

Java8特性总结(一)概述相关推荐

  1. Java面试准备(四)——Java8特性

    Java8特性 一.Lambda表达式 1. 理解函数式编程思想 2. 函数式接口(Functional Interface) 1)什么是函数式接口 2)常见的函数式接口 1. Supplier接口 ...

  2. Java8特性 stream流常用方法

    Java8特性 stream流常用方法 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方 ...

  3. java8特性快速对list集合的筛选过滤和计算

    java8特性快速对list集合的筛选过滤和计算 一.准备工作 1.创建一个Student对象 package com.shiro.test.java8特性;import java.io.Serial ...

  4. 详解Java8特性之方法引用

    #前言 在详解Java8特性之Lambda表达式 中我介绍了Java8中的Lambda表达式,通过Lambda表达式我们就可以快速地创建一个函数式接口的实例,可以说是大大简便了我们开发.你以为只能做到 ...

  5. Java8特性系列文章目录

    (1)详解Java8特性之Lambda表达式 (2)详解Java8特性之方法引用 (3)详解Java8特性之接口默认方法 (4)详解Java8特性之Optional类 (5)详解Java8特性之Str ...

  6. Android Studio如何支持java8特性

    Android Studio对Java8特性的支持 Android Studio 3.0及以上版本支持所有Java7语言功能,以及部分Java8语言功能,这里要注意一下,不是所有Java8特性都支持. ...

  7. java8类型推导,鲜为人知的Java8特性:泛化目标类型推断,java8泛化

    鲜为人知的Java8特性:泛化目标类型推断,java8泛化 在浏览Java8的特性列表的时候,目标类型推断这个特别有趣的.鲜为人知的特性一下子吸引了我.Java语言的设计者通过它让我们减轻了一些使用泛 ...

  8. java8新特性lambda表达式概述

    定义 ​ jdk8发布新特性中,lambda是一大亮点之一.lambda表达式能够简化我们对数据的操作,减少代码量,大大提升我们的开发效率.Lambda 表达式"(lambda expres ...

  9. 紧随时代的步伐--Java8特性之接口默认方法

    1.关于Java8 自从1996年Sun公司发布Java以来,Java到目前为止已经走过21个年头,每一次的升级,都是Java语言的革新,对时代发展的适应.2014年Oracle发布Java8,而据可 ...

最新文章

  1. css(面试第2天)用css绘制三角形
  2. 使用ueditor小结
  3. 调制优缺点_钓鱼,何时用搓饵、何时用拉饵?及对应的优缺点分析
  4. createSQLQuery的addEntity跟setResultTransformer方法
  5. mysql的主从复制优缺点_MySQL主从复制原理,超级详细的总结,看完全通了
  6. 产品经理如何让程序员放下手中的刀?
  7. Python+tkinter不允许退出程序的思路和实现
  8. 【数据结构笔记46】Sort with Swap(0,*)只允许交换0的排序
  9. matlab运行为什么要选中代码,性能 – 为什么(在MATLAB中)这个代码更快?
  10. anaconda同时集成Python2 和 Python3
  11. msicuu.exe,msizap.exe
  12. python就业方向-目前最全的Python的就业方向
  13. 关于SQLServer连接Oracle数据库时报'链接服务器ORCL的 OLE DB 访问接口 OraOLEDB.Oracle 返回了消息 新事务不能登记到指定的事务处理器中。 。'
  14. 计算机网络误区——可以通过非ARP报文(正常数据包)学习ARP表项吗?
  15. php模板如何使用,PHP自定义模板标签详细解答,让你轻松驾驭
  16. signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);
  17. 最小化一维曼哈顿距离的简单证明
  18. python 网站爬虫需要哪些技术?
  19. 从0到1一个文件,用Python 实现 Web 框架
  20. HDUOJ 6707 Shuffle Card

热门文章

  1. 穿越雷区--蓝桥杯笔记
  2. 拼夕夕事件反思,底层逆袭,靠拼命加班行吗
  3. 基于SpringBoot 的学生选课系统(Java毕业设计)
  4. CMS和G1垃圾收集器
  5. linux patch命令
  6. Android 尝试写一份Linux 字符设备驱动
  7. 成功创业者 商战“五计”!
  8. matlab怎么三维图形旋转45度,是否可以在matlab中将矩阵旋转45度
  9. SpringBoot整合Redis储存对象
  10. Linux shutdown命令