天天看點

jdk8新特性(jdk8新特性面試)

jdk8.101和jdk8.102的差別

在JDK1.7的新特性方面主要有下面幾方面的增強:

1.jdk7文法上

1.1二進制變量的表示,支援将整數類型用二進制來表示,用0b開頭。

1.2 Switch語句支援string類型

1.3 Try-with-resource語句

注意:實作java.lang.AutoCloseable接口的資源都可以放到try中,跟final裡面的關閉資源類似; 按照聲明逆序關閉資源 ;Try塊抛出的異常通過Throwable.getSuppressed擷取

1.4 Catch多個異常 說明:Catch異常類型為final; 生成Bytecode 會比多個catch小; Rethrow時保持異常類型

1.5 數字類型的下劃線表示 更友好的表示方式,不過要注意下劃線添加的一些标準

1.6 泛型執行個體的建立可以通過類型推斷來簡化 可以去掉後面new部分的泛型類型,隻用<>就可以了

1.7在可變參數方法中傳遞非具體化參數,改進編譯警告和錯誤

1.8 資訊更豐富的回溯追蹤 就是上面try中try語句和裡面的語句同時抛出異常時,異常棧的資訊

2. NIO2的一些新特性

1.java.nio.file 和java.nio.file.attribute包 支援更詳細屬性,比如權限,所有者

2. symbolic and hard links支援

3. Path通路檔案系統,Files支援各種檔案操作

4.高效的通路metadata資訊

5.遞歸查找檔案樹,檔案擴充搜尋

6.檔案系統修改通知機制

7.File類操作API相容

8.檔案随機通路增強 mapping a region,locl a region,絕對位置讀取

9. AIO Reactor(基于事件)和Proactor

2.1IO and New IO 監聽檔案系統變化通知

通過FileSystems.getDefault().newWatchService()擷取watchService,然後将需要監聽的path目錄注冊到這個watchservice中,對于這個目錄的檔案修改,新增,删除等實踐可以配置,然後就自動能監聽到響應的事件。

2.2 IO and New IO周遊檔案樹 ,通過繼承SimpleFileVisitor類,實作事件周遊目錄樹的操作,然後通過Files.walkFileTree(listDir, opts, Integer.MAX_VALUE, walk);這個API來周遊目錄樹

2.3 AIO異步IO 檔案和網絡 異步IO在java

NIO2實作了,都是用AsynchronousFileChannel,AsynchronousSocketChanne等實作,關于同步阻塞IO,同步非阻塞IO,異步阻塞IO和異步非阻塞IO。Java NIO2中就實作了作業系統的異步非阻塞IO。

3. JDBC 4.1

3.1.可以使用try-with-resources自動關閉Connection, ResultSet, 和 Statement資源對象

3.2. RowSet 1.1:引入RowSetFactory接口和RowSetProvider類,可以建立JDBC driver支援的各種 row sets,這裡的rowset實作其實就是将sql語句上的一些操作轉為方法的操作,封裝了一些功能。

3.3. JDBC-ODBC驅動會在jdk8中删除

4. 并發工具增強

4.1.fork-join

最大的增強,充分利用多核特性,将大問題分解成各個子問題,由多個cpu可以同時解決多個子問題,最後合并結果,繼承RecursiveTask,實作compute方法,然後調用fork計算,最後用join合并結果。

4.2.ThreadLocalRandon 并發下随機數生成類,保證并發下的随機數生成的線程安全,實際上就是使用threadlocal

4.3. phaser 類似cyclebarrier和countdownlatch,不過可以動态添加資源減少資源

5. Networking增強

新增URLClassLoader close方法,可以及時關閉資源,後續重新加載class檔案時不會導緻資源被占用或者無法釋放問題

URLClassLoader.newInstance(new URL[]{}).close();

新增Sockets Direct Protocol

繞過作業系統的資料拷貝,将資料從一台機器的記憶體資料通過網絡直接傳輸到另外一台機器的記憶體中

6. Multithreaded Custom Class Loaders

解決并發下加載class可能導緻的死鎖問題,這個是jdk1.6的一些新版本就解決了,jdk7也做了一些優化。有興趣可以仔細從官方文檔詳細了解

JDK1.8的新特性

一、接口的預設方法

Java 8允許我們給接口添加一個非抽象的方法實作,隻需要使用 default關鍵字即可,這個特征又叫做擴充方法。

二、Lambda 表達式

在Java 8 中你就沒必要使用這種傳統的匿名對象的方式了,Java 8提供了更簡潔的文法,lambda表達式:

Collections.sort(names, (String a, String b) -> {

return b.compareTo(a);

三、函數式接口

Lambda表達式是如何在java的類型系統中表示的呢?每一個lambda表達式都對應一個類型,通常是接口類型。而“函數式接口”是指僅僅隻包含一個抽象方法的接口,每一個該類型的lambda表達式都會被比對到這個抽象方法。因為 預設方法 不算抽象方法,是以你也可以給你的函數式接口添加預設方法。

四、方法與構造函數引用

Java 8 允許你使用 :: 關鍵字來傳遞方法或者構造函數引用,上面的代碼展示了如何引用一個靜态方法,我們也可以引用一個對象的方法:

java se8的新特性有哪些

java se8新特性如下:

Java Programming Language

1、lambda expressions,一個新的語言特性,它可以将功能作為方法的參數or代碼作為資料,它使你表達單一方法接口的執行個體更加簡潔。

2、對已經有方法名的方法提供一個更加可讀的lambda expressions為方法的引用。

3、預設方法使新的功能添加到庫的接口,確定與舊版本的接口編寫的代碼的二進制相容

4、重複注解提供不止一次應用同樣的注解類型

5、類型注解提供應用注解的能力,任何一個類型的使用,不僅在聲明上使用。用于一個可插拔式的系統,此功能提高你代碼的類型檢查。

6、提高類型的推斷

7、方法參數的反射

Collections

1、新的java.util.stream包,提供了stream api支援流元素上的功能性操作。stream api內建到collections api中,使用批量操作,如串行or并行 map-reduce 轉換。

2、使用key collisions改進HashMap的性能

compact profiles

包含java SE平台預定義的子集和使不需要整個平台被部署和運作在小型裝置中的應用

security

1、用戶端預設啟用TLS1.2

2、新的AccessController.doPrivileged,用代碼斷言它的privileges的子集,沒有防止全棧周遊時檢查其他權限

3、更強的基于密碼的加密算法

4、SSL/TLS SNI擴充在JSSE伺服器中支援

5、支援AEAD算法:SunJCE提供增強的支援AES / GCM / nopadding密碼的實作以及GCM算法參數,SunJSSE提供基于密碼套件的AEAD模式增強

6、keystore增強,包含新的keystore類型java.security.DomainLoadStoreParameter,和新的指令行選項-importpassword

7、SHA-224 Message Digests

8、NSA Suite B加密支援

9、更好的支援High Entropy 随機數生成

10、新的java.security.cert.PKIXRevocationChecker類為配置撤銷X.509證書

11、win下64-bit PKCS11

12、新的rcache 類型在Kerberos 5 Replay Caching

13、支援Kerberos 5協定轉換和限制代理

14、預設禁用Kerberos 5弱的加密

15、未綁定SASL為GSS-API/Kerberos 5機制

16、多主機名下SASL服務

17、在Mac OS X上JNI橋接到native JGSS

18、在sunjsse提供更強的實力,EDH鍵的支援

19、在JSSE支援伺服器端密碼套件個性設定

JavaFX

1、新Modena theme實作

2、新SwingNode類容許開發者嵌套Swing内容到javaFX應用中

3、新UI Controls 包含DatePicker 和TreeTableView

4、javafx.print包為JavaFX提供公共printing API

5、三維圖形特性,目前包含3D shapes、camera、lights、subscene、material、picking和antialiasing

6、WebView類提供的新功能和改進,支援更多關于HTML5的特性,Web Scokets,Web Workers和Web Fonts

7、增強文本的支援

8、支援Hi-DPI 顯示

9、css樣式類變成公共API

10、新的ScheduledService類允許自動重新開機服務

11、ARM平台可用JavaFX

tools

1、jjs指令調用Nashorn引擎

2、java指令允許JavaFX應用

3、java man page已經更新

4、jdeps指令行工具提供分析類檔案

5、Java Management Extensions (JMX) 提供遠端診斷指令

6、jarsiger工具可選,從TSA請求簽名時間抽

7、javac tool

7.1、-parameters選項存儲正式的參數名和反射API檢索正式參數的名稱

7.2、JLS 15.21相等操作的類型規則通過javac指令正确的執行

7.3、javac工具現在支援檢查javadoc注釋的内容,該特性通過-Xdoclint選項

7.4、javac工具現在提供生成native header的能力。移除javah工具,通過javac的-h選項使用

8、javadoc tool

8.1、javadoc工具支援新DocTree API

8.2、javadoc工具支援新的javadoc 通路API,允許在java 應用直接調用javadoc 工具,沒有執行新的程序

8.3、javadoc工具現在支援檢查javadoc注釋的内容,該特性通過-Xdoclint選項

Internationalization

1、unicode增強,支援unicode6.2.0

2、采用unicode CLDR資料和java.locale.providers 系統屬性

3、新的Calendar和Locale APIs

4、安裝一個自定義的資源包作為一個擴充的能力

Deployment

1、對sandbox applet和 java web start app,URLPermission現在是用來允許連接配接到伺服器從它們啟動完成後。SocketPermission不再授權

2、在所有安全級别,在主要jar檔案的jar檔案的manifest中必須給定權限屬性

Date-Time Package

一個新的軟體包,提供更加全面的日期-時間模型

Scripting

Nashorn js 引擎

Pack200

1、Pack200支援常量池條目和由JSR 292引入了新的位元組碼

2、JDK8支援由JSR-292, JSR-308 and JSR-335指定類檔案的變化

IO and NIO

1、基于Solaris在Solaris事件端口機制實作新的SelectorProvider。使用系統屬性java.nio.channels.spi.Selector設定的值sun.nio.ch.EventPortSelectorProvder運作

2、減少/jre/lib/charsets.jar檔案中數量

3、提高java.lang.String(byte[], *)構造器和java.lang.String.getBytes()方法的性能

java.lang and java.util.Packages

1、并發的數組排序

2、标準的編碼和解碼Base64

3、無符号運算的支援

1、移除JDBC-ODBC橋

2、JDBC4.2引入新的功能

Java DB

1、JDK8 包含 Java DB 10.10

Networking

1、添加java.net.URLPermission類

2、在java.net.HttpURLConnection中,如果安裝安全管理,請求要求打開一個連接配接請求的權限

Concurrency

1、在java.util.concurrent包中新增類和接口

2、java.util.concurrent.ConcurrentHashMap類添加方法支援聚合操作,基于新的流設施和lambda expressions

3、java.util.concurrent.atomic包中添加類支援可擴充可更新的變量

4、 java.util.concurrent.ForkJoinPool類中添加方法支援通用池

5、 java.util.concurrent.locks.StampedLock類已經添加使用3種模式控制讀/寫通路的基于能力的鎖

Java XML – JAXP

HotSpot

1、硬體特性增加了AES,UseAES和UseAESIntrinsics标簽在打開基于硬體AES可用(Inter 硬體),硬體必須是2010或更新Westmere硬體,如:打開硬體AES,使用下面标記

-XX:+UseAES -XX:+UseAESIntrinsics

關閉硬體AES:

-XX:-UseAES -XX:-UseAESIntrinsics