What's New in JDK 8 java8新特性汇总

    Oracle甲骨文公司终于在2014年3月发布了Java 8正式版,它是java的一个里程牌版本,带来了诸多新特性。 

    针对这些新特性汇总如下:

一、针对java编程语言(Java Programming Language)

    1.lambda表达式:一种新的语言特性,能够把函数作为方法的参数或将代码作为数据。lambda表达式使你在表示函数接口(具有单个方法的接口)的实例更加紧凑。

public class Calculator {

	interface IntegerMath {
		int operation(int a, int b);
	}

	public int operateBinary(int a, int b, IntegerMath op) {
		return op.operation(a, b);
	}

	public static void main(String... args) {

		Calculator myApp = new Calculator();
		IntegerMath addition = (a, b) -> a + b;
		IntegerMath subtraction = (a, b) -> a - b;
		System.out.println("40 + 2 = " + myApp.operateBinary(40, 2, addition));
		System.out.println("20 - 10 = "
				+ myApp.operateBinary(20, 10, subtraction));
	}
}

    2.方法引用 是lambda表达式的一个简化写法,所引用的方法其实是lambda表达式的方法体实现,这样使代码更容易阅读  

myDeck.shuffle();
myDeck.sort(Comparator.comparing(Card::getRank).thenComparing(
				Comparator.comparing(Card::getSuit)));
System.out.println("Sorted by rank, then by suit "
				+ "with static and default methods");
System.out.println(myDeck.deckToString());

详细代码参见《默认方法的概念与代码解析》http://my.oschina.net/cloudcoder/blog/215594

    3.默认方法:Java 8引入default method,或者叫virtual extension method,目的是为了让接口可以事后添加新方法而无需强迫所有实现该接口的类都提供新方法的实现。也就是说它的主要使用场景可能会涉及代码演进。

    默认方法使您能够添加新的功能到你现有库的接口中,并确保与采用老版本接口编写的代码的二进制兼容性.

      4.重复注解:允许在同一声明或类型(类,属性,或方法)的使用中多次使用同一个注解 

@Repeatable(Authorities.class)
public @interface Authority {
     String role();
} 

public @interface Authorities {
    Authority[] value();
} 

public class RepeatAnnotationUseNewVersion {
    @Authority(role="Admin")
    @Authority(role="Manager")
    public void doSomeThing(){ }
}

    5.类型注解:在java 8之前,注解只能是在声明的地方所使用,比如类,方法,属性;java 8里面,注解可以应用在任何地方。

    类型注解被用来支持在Java的程序中做强类型检查。配合插件式的check framework,可以在编译的时候检测出runtime error,以提高代码质量

    6.改善了类型推断

private List<Card> entireDeck= new ArrayList<>();

     7.方法参数反射

二、针对集合(Collections) 
      1.提供了新包java.util.stream,这个包提供了Stream API功能,支持以函数风格(functional-style)去处理流中的元素。在Collections API中已经整合了Stream API,可以在集合上进行批量操作(bulk operations),如顺序或并行的map-reduce转换。 
    Stream API提供了一种操作大数据的接口,让数据操作更容易和更快。它具有过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法,“流”抽象天生就该是持续的,中间方法永远返回的是Stream,因此如果我们要获取最终结果的话,必须使用终点操作才能收集流产生的最终结果。 

    Stream API的目的是利用多核技术可将大数据通过多核并行处理,提高数据的处理效率  

public static void testInt(Integer... numbers) {
		List<Integer> l = Arrays.asList(numbers);
		List<Integer> r = l.stream()
				.map(e -> new Integer(e))
				.filter(e -> e > 2)
				.distinct()
				.collect(Collectors.toList());
		System.out.println("testInt result is: " + r);
	}

    调用:testInt(2, 3, 4, 2, 3, 5, 1);

    2.针对有Key Collisions的HashMaps的性能改进

三、Compact Profiles 
     1:Compact Profiles包含 Java SE平台预定义子集,使应用程序员不需要整个JRE平台即可部署和运行在小型设备上,开发人员可以基于目标硬件的可用资源选择一个合适的JRE运行环境。 

    目前提供了三种Compact Profiles,分别是compact1、compact2、compact3,他们的关系是compact1<compact2<compact3。每个compact profiles包括低版本的profiles(compact2 is a superset of compact1 即compact2是compact1的超集,The full SE API is a superset of the compact3 profiles 而the full SE API又是compact3的超集)

    在命令javac,jdeps命令中都增加了-profile参数

    该特性也是为java9的模块化项目做准备。

详见:http://docs.oracle.com/javase/8/docs/technotes/guides/compactprofiles/compactprofiles.html

Full SE API Beans JNI JAX-WS
  Preferences Accessibility IDL
  RMI-IIOP CORBA Print Service
  Sound Swing Java 2D
  AWT Drag and Drop Input Methods
  Image I/O    
compact3 Security1 JMX  
  XML JAXP2 Management Instrumentation
compact2 JDBC RMI XML JAXP
compact1 Core (java.lang.*) Security Serialization
  Networking Ref Objects Regular Expressions
  Date and Time Input/Output Collections
  Logging Concurrency Reflection
  JAR ZIP Versioning
  Internationalization JNDI Override Mechanism
  Extension Mechanism Scripting  

使用不同的compact profiles的编译后,占用的大致空间见下图:


四、安全性

    这部分的内容较多,主要如下: 

    主要是一些加密算法的支持,详细可以参见原文

五、JavaFX 

    1.3D Graphics包括3D shapes, camera, lights, subscene, material, picking, and antialiasing等

    2.WebView也提供了新的特性和功能改进

     其他可以参见原文

六 工具(tools) 

  1. 增加了jss命令,用于调用 Nashorn engine 
  2. java命令可以启动JavaFX applications 
  3. jdeps命令行工具用于分析类文件 
  4. 针对javac tool增加了一些参数和功能 
  5. 针对javadoc tool增加了新的功能,如DocTree 

七、国际化 
    1.针对unicode的增强,包括支持Unicode6.2.0 
    2.Adoption of Unicode CLDR Data and the java.locale.providers System Property 
    3.New Calendar and Locale APIs 
    4.Ability to Install a Custom Resource Bundle as an Extension 

八、部署

有两项,都是针对权限方面的限制 

九、Date-Time Package  
    提供了一个完整的data-time model的包java.time 

  代码可以参考《默认方法的概念与代码解析》http://my.oschina.net/cloudcoder/blog/215594

十、Scripting

    Nashorn Javascript Engine

十一、java.lang and java.util Packages 
    1. Parallel Array Sorting   并发数组排序,增加针对数据排序的处理效率 
    2. Standard Encoding and Decoding Base64 
    3. Unsigned Arithmetic Support  针对无符号运算的支持 

十二、JDBC 
    1. The JDBC-ODBC Bridge has been removed.  JDBC-ODBC已经被删除 
    2. JDBC 4.2 introduces new features. 

十三、Java DB 

    JDK 8 includes Java DB 10.10. 

十四、 Networking 

    The class java.net.URLPermission has been added. 

    In the class java.net.HttpURLConnection, if a security manager is installed, calls that request to open a connection require permission. 

十五、Concurrency 

    1. Classes and interfaces have been added to the java.util.concurrent package. 

    2. Methods have been added to the java.util.concurrent.ConcurrentHashMap class to support aggregate operations based on the newly added streams facility and lambda expressions. 

    3. Classes have been added to the java.util.concurrent.atomic package to support scalable updatable variables. 

    4. Methods have been added to the java.util.concurrent.ForkJoinPool class to support a common pool. 

    5. The java.util.concurrent.locks.StampedLock class has been added to provide a capability-based lock with three modes for controlling read/write access.

十六、HotSpot
    1. Hardware intrinsics were added to use Advanced Encryption Standard (AES). The UseAES and UseAESIntrinsics flags are available to enable the hardware-based AES intrinsics for Intel hardware. The hardware must be 2010 or newer Westmere hardware. For example, to enable hardware AES, use the following flags:

-XX:+UseAES -XX:+UseAESIntrinsics
To disable hardware AES use the following flags:

-XX:-UseAES -XX:-UseAESIntrinsics

      支持基于硬件特性的AES,但硬件需要是2010年以后的设备或更新的Westmere硬件

    2: Removal of PermGen.

        移除了PermGen(内存的永久保存区域)

        JDK8 HotSpot JVM 将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace);这与Oracle JRockit 和IBM JVM’s很相似,如下图所示

    默认情况下,类元数据只受可用的本地内存限制(容量取决于是32位或是64位操作系统的可用虚拟内存大小)。

    新参数(MaxMetaspaceSize)用于限制本地内存分配给类元数据的大小。如果没有指定这个参数,元空间会在运行时根据需要动态调整。

    3:Default Methods in the Java Programming Language are supported by the byte code instructions for method invocation.

    支持java编程语言中的默认方法

十七、其他改进 

    详细参见原文

原文参见

http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html

时间: 2024-08-31 23:40:46

What's New in JDK 8 java8新特性汇总的相关文章

JAVA8新特性

总结提高,与君共勉 上次在一个同学的面经看到,被问到了JAVA8新特性,这个总结不好,转载一篇神文,一起来了解了解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API "Java is still not dead-and people are starting to figure that out." 本教程

java8 新特性之 Lambda 讲解教程

什么是Lambda Lambda 是个新的特性添加到java的jdk中,说明了java对其它语言的支持,吸收其它语言先进的方法.Lambda 表达在java中提供了类型的引用,方法的引用,和默认方法. 对于Lambda的解释在wiki百科看到了就不做翻译保留原味(看看大家的理解,有不同的看法欢迎探讨)Lambda (programming), a function (or a subroutine) defined, and possibly called, without being boun

C# 6.0 新特性汇总_C#教程

1. 静态using(static using) 静态using声明允许不使用类名直接调用静态方法. The static using declaration allows invoking static methods without the class name. In C# 5 using System; Console.WriteLine("Hello, World!"); In C# 6 using static System.Console; WriteLine("

C#7.0中新特性汇总_C#教程

以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio "15" Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉我们你的想法! C#7.0 增加了许多新功能,并专注于数据消费,简化代码和性能的改善.或许最大的特性就是元祖和模式匹配,元祖可以很容易地拥有多个返回结果,而模型匹配可以根据数据的"形"的不同来简化代码.我们希望,将它们结合起来,从而使你的代码更加简洁高效,也可以使你更加

苹果iPhone7怎么样 iPhone7新特性汇总

iPhone7新特性汇总 特性一:新增配色 在外观方面,iPhone7最大的不同在于搭载双摄像头.依旧采用金属材质铝制机身,天线带进行了优化变得更隐蔽. 新添"钢琴黑"配色,采用特殊工艺让表面光滑并在表面覆盖保护层,最后再加入磁性颗粒进行抛光.除了"钢琴黑"还有黑色.金色.银色.玫瑰金配色. 特性二:触控式Home键 关于iPhone 7的功能方面,Home键是iPhone的核心功能区,iPhone 7对它进行了重新设计.像苹果在MacBook触摸板上所作的事情一样

Java8新特性之字符串去重介绍_java

8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新.支持在运行时通过API来修改MinHeapFreeRatio和MaxHeapFreeRatio参数.新的GC调优指南文档.不过在众多新特性中,最令人期待的还属字符串去重(String Deduplication ).如何减少内存占用一直是一个永恒的话题,而在Java应用中,经常会看到String对象会占用应用30%的内存,它是Java中最常用的对象之一.新的字符串去重特性可以帮助减少应用中St

详谈Java8新特性泛型的类型推导_java

1. 泛型究竟是什么? 在讨论类型推导(type inference)之前,必须回顾一下什么是泛型(Generic).泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法的创建中.理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = new ArrayList<Ap

java8新特性 (λ、stream 与 默认接口方法)

1.lambda λ表达式本质上是一个匿名方法,用来方便地实现函数接口.也就是说,λ表达式主要用于替换以前广泛使用的内部匿名类.  让我们来看下面这个例子:     public int add(int x, int y) {         return x + y;     } 转成λ表达式后是这个样子:     (int x, int y) -> x + y; 参数类型也可以省略,Java编译器会根据上下文推断出来:     (x, y) -> x + y; //返回两数之和 或者  

Java8新特性之Lambda表达式浅析_java

说到java 8,首先会想到lambda(闭包)以及虚拟扩展方法(default method),这个特性早已经被各大技术网站炒得沸沸扬扬了,也是我们java 8系列开篇要讲的第一特性(JEP126 http://openjdk.java.net/jeps/126),jdk8的一些库已经应用了lambda表达式重新设计了,理解他对学习java 8新特性有着重要的意义. 一.函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是