一、switch優化更新
JDK11以及以前的版本:
switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); break; case THURSDAY: case SATURDAY: System.out.println(8); break; case WEDNESDAY: System.out.println(9); break; }
JDK12版本
switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); }
JDK13版本
static void howMany(int k) { System.out.println( switch (k) { case 1 -> "one" case 2 -> "two" default -> "many" } );}
二、文本塊升級
2.一、html例子
JDK13以前
String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n";
JDK13優化的:
String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;
2.二、SQL變化
JDK13以前
String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" + "WHERE `CITY` = 'INDIANAPOLIS'\n" + "ORDER BY `EMP_ID`, `LAST_NAME`;\n";
JDK13
String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; """;
2.三、解釋
文本塊
""" line 1 line 2 line 3 """
至關於字符串文字:
"line 1\nline 2\nline 3\n"
三、動態CDS檔案
目標:
提升應用程序類 - 數據共享(AppCDS)的可用性。消除了用戶進行試運行以建立每一個應用程序的類列表的須要。
-Xshare:dump
使用類列表由該選項啓用的靜態歸檔應繼續工做。這包括內置類加載器和用戶定義的類加載器的類。
四、取消使用未使用的內存
摘要:
加強 ZGC 以將未使用的堆內存返回給操做系統。
動機:
ZGC 目前沒有取消提交併將內存返回給操做系統,即便該內存長時間未使用。對於全部類型的應用程序和環境,此行爲並不是最佳, 尤爲是那些須要關注內存佔用的應用程序和環境 例如:經過使用支付資源的容器環境。應用程序可能長時間處於空閒狀態並與許多其 他應用程序共享或競爭資源的環境。應用程序在執行期間可能具備很是不一樣的堆空間要求。
例如,啓動期間所需的堆可能大於穩態執行期間稍後所需的堆。HotSpot 中的其餘垃圾收集器,如 G1 和 Shenandoah,今天提供了這種功能,某些類別的用戶發現它很是有用。將此功能添加到 ZGC 將受到同一組用戶的歡迎。
五、從新實現舊版套接字API
摘要:
使用更簡單,更現代的實現替換 java.net.Socket 和 java.net.ServerSocketAPI 使用的底層實現,易於維護和調試。新的實 現很容易適應用戶模式線程,也就是光纖,目前正在 Project Loom 中進行探索。
動機:
在 java.net.Socket 和 java.net.ServerSocketAPI,以及它們的底層實現,能夠追溯到JDK 1.0。實現是遺留 Java 和 C 代碼的混合,維護和調試很痛苦。該實現使用線程堆棧做爲 I/O 緩衝區,這種方法須要屢次增長默認線程堆棧大小。
該實現使用本機數據 結構來支持異步關閉,這是多年來微妙可靠性和移植問題的根源。該實現還有幾個併發問題,須要進行大修才能正確解決。在將來的光 纖世界環境中,而不是在本機方法中阻塞線程,當前的實現不適用於目的。
六、FileSystems.newFileSystem新方法
核心庫 java.nio 中添加了 FileSystems.newFileSystem(Path,Map )方法
添加了三種新方法 java.nio.file.FileSystems,以便更輕鬆地使用將文件內容視爲文件系統的文件系統提供程序。
一、newFileSystem(Path) 二、newFileSystem(Path, Map) 三、newFileSystem(Path, Map, ClassLoader)
添加爲 newFileSystem(Path, Map<String, ?>) 已使用現有 newFileSystem(Path, ClassLoader) 並指定類加載器 的代碼建立源(但不是二進制)兼容性問題。例如,因爲引用 newFileSystem 不明確,所以沒法編譯如下內容:
FileSystem fs = FileSystems.newFileSystem(path, null);
爲了不模糊引用,須要修改此代碼以將第二個參數強制轉換爲java.lang.ClassLoader。
七、nio新方法
核心庫 java.nio 中新的 java.nio.ByteBuffer 批量獲取/放置方法轉移字節而不考慮緩衝區位置。
在其餘緩衝區類型定義絕對批量 get 和 put 傳輸連續字節序列的方法,而不考慮或影響緩衝區位置。
八、核心庫/ java.time
新日本時代名稱 Reiwa,此更新中添加了表明新 Reiwa 時代的實例。與其餘時代不一樣,這個時代沒有公共領域。它能夠經過調用 JapaneseEra.of(3) 或得到 JapaneseEra.valueOf("Reiwa")。JDK13 及更高版本將有一個新的公共領域來表明這個時代。
NewEra 從 2019 年 5 月 1 日開始的日本時代的佔位符名稱「 」已被新的官方名稱取代。依賴佔位符名稱(請參閱 JDK-8202088)獲取新時代單例( JapaneseEra.valueOf("NewEra"))的應用程序將再也不起做用,請參閱 JDK-8205432。
九、核心庫/ java.util中:I18N
支持 Unicode 12.1,此版本將 Unicode支持升級到12.1,其中包括如下內容:
java.lang.Character 支持 12.1 級的 Unicode 字符數據庫,其中 12.0 從 11.0 開始增長 554 個字符,總共 137,928 個字符。這些新增內容包括 4 個新腳本,總共 150 個腳本,以及 61 個新的表情符號字符。U+32FF SQUARE ERA NAME REIWA從 12.0 開始,12.1 只添加一個字符。java.text.Bidi 和 java.text.Normalizer 類分別支持 12.0 級的 Unicode 標準附件, #9和#15。java.util.regexpackage 支持基於12.0 級 Unicode 標準附件#29 的擴展字形集羣。
十、熱點/ GC
10.1 JEP 351 ZGC 取消提交未使用的存儲器。 10.2 添加了 -XXSoftMaxHeapSize 標誌。 10.3 ZGC 支持的最大堆大小從 4 TB增長到 16 TB。
十一、安全庫/ java.security
11.1 該 com.sun.security.crl.readtimeout 系統屬性設置爲 CRL 檢索的最大讀取超時,單位爲秒。若是還沒有設置該屬性,或者其值爲負,則將其設置爲默認值 15秒,值 0 表示無限超時。
11.2 新的 keytool -showinfo -tls 用於顯示 TLS 配置信息的命令 keytool -showinfo -tls 添加了一個顯示 TLS 配置信息的新命令。
11.3 SunMSCAPI 提供程序如今支持如下一代加密(CNG)格式讀取私鑰。這意味着 CNG 格式的 RSA 和 EC 密鑰可從 Windows 密鑰庫加載,例如 「Windows-MY」。與 EC(簽名算法SHA1withECDSA,SHA256withECDSA等等)也支持。
十二、刪除功能
刪除的部分功能:
12.1 核心庫 java.net 中,再也不支持 Pre-JDK 1.4 SocketImpl 實現 java.net.SocketImpl 此版本已刪除對爲 JavaSE1.3 及更早版本編譯的自定義實現的支持。此更改對 SocketImpl 爲 Java SE 1.4(2002年發佈)或更新版本編譯的實現沒有影響。
12.2 核心庫 java.lang 中,刪除運行時跟蹤方法,過期的方法traceInstructions(boolean),並 traceMethodCalls(boolean) 已經從刪除 java.lang.Runtime 類。這些方法對許多版本都不起做用,它們的預期功能由J ava虛擬機工具接口(JVMTI)提供。
最後
歡迎你們關注個人公種浩【程序員追風】,整理了1000道2019年多家公司java面試題400多頁pdf文檔,文章都會在裏面更新,整理的資料也會放在裏面。