摘要:在語言上并沒有添加太多的新特性,但在使用性能上做了很改進。二多版本包支持即在不同版本下,執行相應版本的代碼。在發布新版本的后,用戶可能不會升級到新環境,但是項目可能會開始逐步升級到新版本,來提前適應即將到來的環境。
Java9在語言上并沒有添加太多的新特性,但在使用、性能上做了很改進。
一、模塊間引用Java9添加了模塊化的概念,使得之前的控制訪問權限有了改變。
之前:
public
protect
(default,package)
private
Java9
public to everyone
public but only for specific user
public within a module
protect
(default,package)
private
可以看到,對public類又做了進一步的限制,主要是對模塊間的依賴做出限制,使得模塊能夠控制那些public類型能夠被其他模塊讀取,以及該模塊需要使用其他模塊的類型。
如何定義模塊在src根目錄下,創建module-info.java:
// 該模塊的名稱為 module.one module module.one { // 該包下的所有public類型對其他模塊可見 export package.name; // 該public類型對其他模塊可見 export class.name; }
// 該模塊的名稱為 module.two module module.two { // 該模塊將引用模塊1 // 該模塊將能夠使用模塊1所開放的public類型 // 其他的pubic類型將不可見 require module.one; }
以上是最簡單的模塊使用方式。
二、多版本jar包支持即在不同java版本下,執行相應版本的代碼。比如DateUtil.java,若在java7環境下,將執行java7的代碼,在java8的環境下,將執行java8的代碼。
在發布新版本的java后,用戶可能不會升級到新環境, 但是項目可能會開始逐步升級到新版本,來提前適應即將到來的環境。此時就要對多個版本的支持。
$ javac --release 11 java11/com/xiao/test/Tester.java $ javac --release 8 java8/com/xiao/test/Tester.java $ tree . ├── java11 │?? └── com │?? └── xiao │?? └── test │?? ├── Tester.class │?? └── Tester.java └── java8 └── com └── xiao └── test ├── Tester.class └── Tester.java 8 directories, 4 files $ jar -v -c -f multiversion.jar -C java8 com/xiao/test/Tester.class --release 11 -C java11 com/xiao/test/Tester.class 已添加清單 正在添加: com/xiao/test/Tester.class(輸入 = 428) (輸出 = 296)(壓縮了 30%) 正在添加: META-INF/versions/11/com/xiao/test/Tester.class(輸入 = 429) (輸出 = 296)(壓縮了 31%) $ ls java11 java8 multiversion.jar $ /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/bin/java -cp multiversion.jar com.xiao.test.Tester In Java8 $ /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/bin/java -cp multiversion.jar com.xiao.test.Tester In Java11三、Interface增強(可添加私有方法)
public interface PrivateMethod { // java7以前 // 默認為 public static final String NAME = "xiao"; // 默認為 public String get(); // java8 default void giveMyMoney() { System.out.println("No way!!!"); } static void makeFriend() { System.out.println("Hello, my friend."); } // java9 private void show() { System.out.println("Nobody can find me."); } }四、JShell
提供互交式的工具。
$ jshell | 歡迎使用 JShell -- 版本 11.0.1 | 要大致了解該版本, 請鍵入: /help intro jshell> /help intr | | intro | ===== | | 使用 jshell 工具可以執行 Java 代碼,從而立即獲取結果。 | 您可以輸入 Java 定義(變量、方法、類等等),例如:int x = 8 | 或 Java 表達式,例如:x + x | 或 Java 語句或導入。 | 這些小塊的 Java 代碼稱為“片段”。 | | 這些 jshell 工具命令還可以讓您了解和 | 控制您正在執行的操作,例如:/list | | 有關命令的列表,請執行:/help jshell> System.out.println("The first time use jshell"); The first time use jshell jshell> String a = "xiao" a ==> "xiao" jshell> System.out.println("name" + a) namexiao jshell> System.out.println("name:" + a) name:xiao jshell>五、try/catch增強
Java6以及之前的版本中,在使用一些資源時,通常會使用try/catch語句,并且在finally語句中來關閉資源,Java7做了改進,Java9也做了一點改進。
public class TryCatchImprove { public static void main(String[] args) { // Java 6 or early // 使用的資源,建議都在finally塊中關閉 InputStreamReader inputStream7 = new InputStreamReader(System.in); try { int i = inputStream7.read(); } catch (IOException ie) { ie.printStackTrace(); } finally { try { inputStream7.close(); } catch (IOException ie) { ie.printStackTrace(); } } // Java 7,8 // 當有多個資源被使用時,括號中使用 ; 分割,不再需要finally語句塊 try (InputStreamReader inputStream8 = new InputStreamReader(System.in)) { int i = inputStream8.read(); } catch (IOException ie) { ie.printStackTrace(); } // Java 9 // 能夠直接在try的括號中使用變量,多個變量時用 ; 分割 InputStreamReader inputStream9 = new InputStreamReader(System.in); try (inputStream9) { int i = inputStream9.read(); } catch (IOException ie) { ie.printStackTrace(); } } }參考
更多更詳細的特性,可以參照以下:
Oracle
What’s New in Oracle JDK 9:https://docs.oracle.com/javas...
Java Language Updates :https://docs.oracle.com/javas...
Blog
NewImport:http://www.importnew.com/2452...
http://www.runoob.com/java/ja...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72829.html
摘要:今晚將正式發布。競爭鎖的性能優化能夠改善程序運行時的多線程同步效率。模塊化這就是令跳票數次的罪魁禍首。優化字符串占用空間在很多應用當中,字符串已經成為一個消耗內存的主要部分。 今晚 Java 9 將正式發布。Java 9 的新特性都列在官方頁面當中,本文介紹值得你關注的其中幾個點: ? 進程操作改進(JEP 102: Process API Updates) 新增的 java.lang...
摘要:來來來,花分鐘看看的七大新特性,還有代碼樣例。本地是指方法內的變量聲明。從開始,這個正式進入標準庫包。同步請求會阻止當前線程??上驳氖?,如果嘗試改變不可變集合,會通過發出警告是在中引入的,增加了三個新方法。 現在Java有多元化的發展趨勢,既有JS又有C++還有C#的影子,不學習那是不行滴。來來來,花5分鐘看看Java9-Java11的七大新特性,還有代碼樣例。Java11 發布了,然...
以下是Java技術棧微信公眾號發布的關于 Java 的技術干貨,從以下幾個方面匯總。 Java 基礎篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進階篇 Java 新特性篇 Java 工具篇 Java 書籍篇 Java基礎篇 8張圖帶你輕松溫習 Java 知識 Java父類強制轉換子類原則 一張圖搞清楚 Java 異常機制 通用唯一標識碼UUID的介紹及使用 字符串...
摘要:新特性概述系列一安裝及使用系列二運行系列三模塊系統精要系列四更新系列五系列六系列七系列八系列九與的區別遷移注意事項參數遷移相關選項解析使用構建實例使用示例帶你提前了解中的新特性 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:就在前段時間,官方宣布正式發布,可在生產環境中使用這無疑對我們來說是一大好的消息。途中列舉了的正式發布時間以及支持計劃。長期支持,表示會對其做長期的補丁安全等擴展支持等。 showImg(https://segmentfault.com/img/remote/1460000016796660); 就在前段時間,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發布,可在...
閱讀 2929·2021-10-14 09:43
閱讀 2867·2021-10-14 09:42
閱讀 4640·2021-09-22 15:56
閱讀 2355·2019-08-30 10:49
閱讀 1587·2019-08-26 13:34
閱讀 2370·2019-08-26 10:35
閱讀 591·2019-08-23 17:57
閱讀 2023·2019-08-23 17:15