What's New in JDK 8 java8新特性彙總

    Oracle甲骨文公司終於在2014年3月發佈了Java 8正式版,它是java的一個里程牌版本,帶來了諸多新特性。

    針對這些新特性彙總以下: html

1、針對java編程語言(Java Programming Language) java

    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 express

    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.改善了類型推斷 oracle

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

     7.方法參數反射

2、針對集合(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的性能改進

3、Compact Profiles
     1:Compact Profiles包含 Java SE平臺預約義子集,使應用程序員不須要整個JRE平臺便可部署和運行在小型設備上,開發人員能夠基於目標硬件的可用資源選擇一個合適的JRE運行環境。 

    目前提供了三種Compact Profiles,分別是compact一、compact二、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的編譯後,佔用的大體空間見下圖:


4、安全性

    這部分的內容較多,主要以下:

    主要是一些加密算法的支持,詳細能夠參見原文

5、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 
7、國際化
    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 

8、部署

有兩項,都是針對權限方面的限制 

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

  代碼能夠參考《默認方法的概念與代碼解析http://my.oschina.net/cloudcoder/blog/215594

10、Scripting

    Nashorn Javascript Engine

11、java.lang and java.util Packages
    1. Parallel Array Sorting   併發數組排序,增長針對數據排序的處理效率
    2. Standard Encoding and Decoding Base64
    3. Unsigned Arithmetic Support  針對無符號運算的支持

12、JDBC
    1. The JDBC-ODBC Bridge has been removed.  JDBC-ODBC已經被刪除
    2. JDBC 4.2 introduces new features.

十3、Java DB

    JDK 8 includes Java DB 10.10.

十4、 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.

十5、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.

十6、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編程語言中的默認方法

十7、其餘改進

    詳細參見原文

原文參見

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

相關文章
相關標籤/搜索