程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java9都快發布了,Java8的十大新特性你了解多少呢?,java9java8

Java9都快發布了,Java8的十大新特性你了解多少呢?,java9java8

編輯:JAVA綜合教程

Java9都快發布了,Java8的十大新特性你了解多少呢?,java9java8


Java 9預計將於今年9月份發布,這是否會是一次裡程碑式的版本,我們拭目以待。今天,我們先來復習一下2014年發布的Java 8的十大新特性。

Java 8可謂是自Java 5以來最具革命性的版本了,她在語言、編譯器、類庫、開發工具以及Java虛擬機等方面都帶來了不少新特性。我們來一一回顧一下這些特性。

一、Lambda表達式

Lambda表達式可以說是Java 8最大的賣點,她將函數式編程引入了Java。Lambda允許把函數作為一個方法的參數,或者把代碼看成數據。

一個Lambda表達式可以由用逗號分隔的參數列表、–>符號與函數體三部分表示。例如:

Arrays.asList( "p", "k", "u","f", "o", "r","k").forEach( e -> System.out.println( e ) );

 1 Arrays.asList( "p", "k", "u","f", "o", "r","k").forEach( e -> System.out.println( e ) ); 

為了使現有函數更好的支持Lambda表達式,Java 8引入了函數式接口的概念。函數式接口就是只有一個方法的普通接口。java.lang.Runnable與java.util.concurrent.Callable是函數式接口最典型的例子。為此,Java 8增加了一種特殊的注解@FunctionalInterface:

1 @FunctionalInterface
2 public interface Functional {
3     void method();
4 }

二、接口的默認方法與靜態方法

我們可以在接口中定義默認方法,使用default關鍵字,並提供默認的實現。所有實現這個接口的類都會接受默認方法的實現,除非子類提供的自己的實現。例如:

1 public interface DefaultFunctionInterface {
2     default String defaultFunction() {
3         return "default function";
4     }
5 }

我們還可以在接口中定義靜態方法,使用static關鍵字,也可以提供實現。例如:

1 public interface StaticFunctionInterface {
2     static String staticFunction() {
3         return "static function";
4     }
5 }

接口的默認方法和靜態方法的引入,其實可以認為引入了C++中抽象類的理念,以後我們再也不用在每個實現類中都寫重復的代碼了。

三、方法引用

通常與Lambda表達式聯合使用,可以直接引用已有Java類或對象的方法。一般有四種不同的方法引用:

  1. 構造器引用。語法是Class::new,或者更一般的Class< T >::new,要求構造器方法是沒有參數;

  2. 靜態方法引用。語法是Class::static_method,要求接受一個Class類型的參數;

  3. 特定類的任意對象方法引用。它的語法是Class::method。要求方法是沒有參數的;

  4. 特定對象的方法引用,它的語法是instance::method。要求方法接受一個參數,與3不同的地方在於,3是在列表元素上分別調用方法,而4是在某個對象上調用方法,將列表元素作為參數傳入;

四、重復注解

在Java 5中使用注解有一個限制,即相同的注解在同一位置只能聲明一次。Java 8引入重復注解,這樣相同的注解在同一地方也可以聲明多次。重復注解機制本身需要用@Repeatable注解。Java 8在編譯器層做了優化,相同注解會以集合的方式保存,因此底層的原理並沒有變化。

五、擴展注解的支持

Java 8擴展了注解的上下文,幾乎可以為任何東西添加注解,包括局部變量、泛型類、父類與接口的實現,連方法的異常也能添加注解。

六、Optional

Java 8引入Optional類來防止空指針異常,Optional類最先是由Google的Guava項目引入的。Optional類實際上是個容器:它可以保存類型T的值,或者保存null。使用Optional類我們就不用顯式進行空指針檢查了。

七、Stream

Stream API是把真正的函數式編程風格引入到Java中。其實簡單來說可以把Stream理解為MapReduce,當然Google的MapReduce的靈感也是來自函數式編程。她其實是一連串支持連續、並行聚集操作的元素。從語法上看,也很像linux的管道、或者鏈式編程,代碼寫起來簡潔明了,非常酷帥!

八、Date/Time API (JSR 310)

Java 8新的Date-Time API (JSR 310)受Joda-Time的影響,提供了新的java.time包,可以用來替代 java.util.Date和java.util.Calendar。一般會用到Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration這些類,對於時間日期的改進還是非常不錯的。

九、JavaScript引擎Nashorn

Nashorn允許在JVM上開發運行JavaScript應用,允許Java與JavaScript相互調用。

十、Base64

在Java 8中,Base64編碼成為了Java類庫的標准。Base64類同時還提供了對URL、MIME友好的編碼器與解碼器。

除了這十大新特性之外,還有另外的一些新特性:

  • 更好的類型推測機制:Java 8在類型推測方面有了很大的提高,這就使代碼更整潔,不需要太多的強制類型轉換了。

  • 編譯器優化:Java 8將方法的參數名加入了字節碼中,這樣在運行時通過反射就能獲取到參數名,只需要在編譯時使用-parameters參數。

  • 並行(parallel)數組:支持對數組進行並行處理,主要是parallelSort()方法,它可以在多核機器上極大提高數組排序的速度。

  • 並發(Concurrency):在新增Stream機制與Lambda的基礎之上,加入了一些新方法來支持聚集操作。

  • Nashorn引擎jjs:基於Nashorn引擎的命令行工具。它接受一些JavaScript源代碼為參數,並且執行這些源代碼。

  • 類依賴分析器jdeps:可以顯示Java類的包級別或類級別的依賴。

  • JVM的PermGen空間被移除:取代它的是Metaspace(JEP 122)。

Java 8是一次變化巨大的更新,耗費了工程師大量的時間,還借鑒了很多其它語言和類庫。我們無法在這裡一一詳細列舉,以後有機會一定給大家詳細解讀一下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved