1. 程式人生 > >Java8特性總結(一)概述

Java8特性總結(一)概述

前言

Java8已經正式推出3年,但是在實際生產環境中使用的卻不是很多。
但Java8是自Java5後最具革命性的版本,這麼有革命性的版本我們更需要掌握。
通過系列文章,將Java8的新特性儘量的都介紹清楚。

導航

數字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(){
        @Override
        public 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所代替。

部分參考文章

相關推薦

Java8特性總結概述

前言 Java8已經正式推出3年,但是在實際生產環境中使用的卻不是很多。 但Java8是自Java5後最具革命性的版本,這麼有革命性的版本我們更需要掌握。 通過系列文章,將Java8的新特性儘量的都介紹清楚。 導航 數字Java8 195新的

HTML5新特性總結-新標籤

一. 語義化標籤 1. 使用語義化標籤的原因/優點 根據內容的結構化使用語義化標籤,能夠使開發者更好的閱讀和理解以及瀏覽器爬蟲與搜尋引擎解析。 2. 新標籤 新block標籤:header,footer,main,aside,article,section,nav,h

Java8特性總結介面方法,註解,日期,Base64

導航 前言 這幾個知識點相對內容較少,放到一篇文章裡介紹。 介面方法 介面方法如何寫,大家都知道了,很簡單。 談到介面方法,那就難免不談談他的繼承關係。 多個介面 Java是可以實現多個介面的,那這個時候實現的多個介面有同名,同參的介面

文檔總結——文檔的概述

理解 需要 軟件需求 是否 研究 strong 開發項目 問題 項目開發 寫完文檔後,本來想寫一篇具體的文檔的總結的,後來看大家都寫的具體文檔總結,於是我就想:我還是寫一些跟大家不一樣的東西吧。 所以,我就說說我對各個文檔的宏觀理解吧。

java8簡易學習階段性總結

java8簡易學習階段性總結(一) 寫在前面:本文講簡易講解java8中的介面新特性、lambda表示式、函式介面、方法引用、streamAPI、資料並行化操作、級聯表示式和柯里化、Map的操作、時間日期API 測試所用到的程式碼地址:https://github.com/Blan

ES6、ES7、ES8特性-學習提煉總結

ES6 ECMAScript 6.0,簡稱ES6是JavaScript語言的下一代標準,在2015年6月釋出。目的是讓JavaScript語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。 Babel轉碼器 Babel是一個廣泛使用的ES6轉碼器,可以將ES6程式碼轉為

Android之Activity系列總結--Activity概述

本文內容建立 Activity實現使用者介面在清單檔案中宣告 Activity啟動 Activity啟動 Activity 以獲得結果結束 Activity管理 Activity 生命週期實現生命週期回撥儲存 Activity 狀態處理配置變更協調 Activity 是一個應用元件,使用者可與其提供的螢幕進行

作業系統知識點總結作業系統概述

《作業系統概述》 作業系統結構圖: (1)作業系統的基本概念:作業系統(Operating System, OS)是指控制和管理整個計算機系統的硬體和軟體資源,併合理地組織 排程計算機的工作和資源的分配,以提供給使用者和其他軟體方便的介面和環境的程式集合。 (

Kafka總結:Kafka概述

Kafka是什麼? KafKa是一個高吞吐量、分散式的釋出——訂閱訊息系統。據KafKa官網介紹,當前的KafKa已經定位為一個分散式流式處理平臺(a distributed streaming platform),它以可水平擴充套件和具

項目進階 之 集群環境搭建概述

問題 特點 多臺 cpu 好的 content 成了 系統資源 通過 今天我們說一個不是特別新,但近期今年伴隨大數據熱而比較火的一個技術-集群技術。 什麽是集群技術 集群(Cluster)技術是指一組相互犭蟲立的計算機,利用快速通信網絡組

java_web項目開發經驗總結

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

spring之註解概述

dsm 的人 src article service 優缺點 中一 auto 數據 Spring的核心是依賴註入(DI),而依賴註入的基礎是依賴信息的配置。這些配置稱之為元數據。在之前的的學習中。一直採用的是基於xml的配置,這些元數據配置在spring內部被註冊成為B

salesforce零基礎學習七十二項目中的零碎知識點小總結

gin 不同 grant dmi ima -m ron 角色 com 項目終於告一段落,雖然比較苦逼,不過也學到了好多知識,總結一下,以後當作參考。 一.visualforce標簽中使用html相關的屬性使用 曾經看文檔沒有看得仔細,導致開發的時候走了一些彎路。還好得到

OpenGL在MFC中的使用總結——基本框架

palette 接受 white 要求 無效 結構 del 一次 是你 項目中要畫3D顯示的模型,於是要用到OpenGL,加上是在MFC中,並且是在MFC中的ActiveX中使用。再並且鑒於他們程序主框架的設定。常規的方法還不一定能實現。所以還是查過不少資料,在此一一總

操作系統基礎知識總結

一個 快速 會有 處理死鎖 b2c fcm 死鎖 空間 存儲系統 1. 進程和線程的區別 進程 進程,即正在運行的程序,程序從硬盤載入到內存就變成進程。進程是資源的擁有者,每個進程都擁有著自己的內存空間與多個線程。 線程 線程是指令的執行者,是計算機執行指令的基本單元,一個

react native 知識點總結

修改 ltp 組件 改變 set 覆蓋 sta 一個 個數 一、關於react native 版本的升級 參照文檔:http://reactnative.cn/docs/0.45/upgrading.html react-native -v

SEO總結

.com http 分享 com ima 技術 wid -1 ges SEO總結(一)

js基本語法總結

向上取整 取余 轉字符串 結果 lin ase 調試 錯誤 進行 1.js簡介 a)js是一種網頁腳本語言,使得瀏覽器可以與網頁互動。 js的一種基於對象和事件驅動,具有安全性能的腳本語言,腳本語言就是在客戶端的瀏覽器就可以互動響應處理程序的語言,而不需要服務器的處理和響應

JSON必知必會學習總結

tor lint 沒有 script app 對數 數據交換格式 object 什麽 七月第一周,從學校畢業回來上班的第一周。離開一段時候後,再次回來重新工作,有了很多新的認識,不再是實習時那麽混混沌沌了。每天我自己該做什麽,怎麽做,做到什麽程度更清晰了。除了要去完成我負責

PHP學習總結

encode 什麽 code 解決 new span att 面向對象 反斜杠 》PHP 面向對象 使用parent訪問父類的構造方法(__construct)時一定要為當前類繼承要訪問的構造方法 類的構造方法(__construct)在實例化時直接被加載,靜態方法