此次版本升級,從根源上講,就是爲了改進Java現有的生態系統。你們都知道,java相比於.net性能差了不少,運行時間也大大超出了一些計算密集項目的預算。因此Java如今主要應用在Web上,優點比較明顯,在於他的靈活和模塊強大,學習曲線不是很陡峭。可是對於服務器衍生產品或者對於安全性很高的金融系統,java就顯得有點不夠用。java
經過函數式編程和併發特性的引入,使得java的運行效率和安全性更高。其中要提到的就是Lambda表達式和Closure特性。express
一般,在數學和計算機科學領域,一個Lambda表達式就是一個函數:對於部分或所有的輸入組合值,它都指定一個輸出值。而在java 8中的Lambda表達式是將函數的思想引入語言。函數能夠做爲方法的參數經過某種方式傳入參數列表中。編程
Lambda的語法通常爲:安全
(parameters) -> expression
服務器
or多線程
(parameters) -> { statements; }
閉包
典型的例子:併發
1. (int x, int y) -> x + y // 傳入兩個整數,返回他們的和 2. (x, y) -> x - y // 傳入兩個整數,返回他們的差 3. () -> 42 // 不傳參,返回42 4. (String s) -> System.out.println(s) // 傳入一個字符串,在控制檯打印出他的值,方法自己無返回值 5. x -> 2 * x // 傳入一個整數,返回他的2倍數值 6. c -> { int s = c.size(); c.clear(); return s; } // 傳入一個集合,清空他,而後返回他(清空以前)的長度
Lambda更像js中的閉包特性。使得遍歷集合時更加簡潔。
函數式編程
public void anonymousTest() { String isFinalVariable = "最終返回值"; String variable = "外部變量"; new Thread(new Runnable() { String variable = "多線程類成員"; public void run() { String variable = "這是局部變量"; System.out.println("->" + variable); System.out.println("->" + this.variable); } }).start(); }
運行結果:函數
這是局部變量 多線程類成員
總的來講,新版的JDK將更多之前函數式語言才具有的特性(表明:Haskell語言)融入到java中,使得java在高數值計算密度的項目中應用的可能性大大加強。同時,對於併發編程(表明:Erlang語言)的支持也愈來愈好,在符合摩爾定律的硬件性能提高的年代,更能匹配大型企業項目的技術選型。