摘要:在語言上并沒有添加太多的新特性,但在使用性能上做了很改進(jìn)。二多版本包支持即在不同版本下,執(zhí)行相應(yīng)版本的代碼。在發(fā)布新版本的后,用戶可能不會升級到新環(huán)境,但是項目可能會開始逐步升級到新版本,來提前適應(yīng)即將到來的環(huán)境。
Java9在語言上并沒有添加太多的新特性,但在使用、性能上做了很改進(jìn)。
一、模塊間引用Java9添加了模塊化的概念,使得之前的控制訪問權(quán)限有了改變。
之前:
public
protect
(default,package)
private
Java9
public to everyone
public but only for specific user
public within a module
protect
(default,package)
private
可以看到,對public類又做了進(jìn)一步的限制,主要是對模塊間的依賴做出限制,使得模塊能夠控制那些public類型能夠被其他模塊讀取,以及該模塊需要使用其他模塊的類型。
如何定義模塊在src根目錄下,創(chuàng)建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版本下,執(zhí)行相應(yīng)版本的代碼。比如DateUtil.java,若在java7環(huán)境下,將執(zhí)行java7的代碼,在java8的環(huán)境下,將執(zhí)行java8的代碼。
在發(fā)布新版本的java后,用戶可能不會升級到新環(huán)境, 但是項目可能會開始逐步升級到新版本,來提前適應(yīng)即將到來的環(huán)境。此時就要對多個版本的支持。
$ 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增強(qiáng)(可添加私有方法)
public interface PrivateMethod { // java7以前 // 默認(rèn)為 public static final String NAME = "xiao"; // 默認(rèn)為 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 工具可以執(zhí)行 Java 代碼,從而立即獲取結(jié)果。 | 您可以輸入 Java 定義(變量、方法、類等等),例如:int x = 8 | 或 Java 表達(dá)式,例如:x + x | 或 Java 語句或?qū)搿?| 這些小塊的 Java 代碼稱為“片段”。 | | 這些 jshell 工具命令還可以讓您了解和 | 控制您正在執(zhí)行的操作,例如:/list | | 有關(guān)命令的列表,請執(zhí)行:/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增強(qiáng)
Java6以及之前的版本中,在使用一些資源時,通常會使用try/catch語句,并且在finally語句中來關(guān)閉資源,Java7做了改進(jìn),Java9也做了一點改進(jìn)。
public class TryCatchImprove { public static void main(String[] args) { // Java 6 or early // 使用的資源,建議都在finally塊中關(guān)閉 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 // 當(dāng)有多個資源被使用時,括號中使用 ; 分割,不再需要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(); } } }參考
更多更詳細(xì)的特性,可以參照以下:
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...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72829.html
摘要:今晚將正式發(fā)布。競爭鎖的性能優(yōu)化能夠改善程序運行時的多線程同步效率。模塊化這就是令跳票數(shù)次的罪魁禍?zhǔn)?。?yōu)化字符串占用空間在很多應(yīng)用當(dāng)中,字符串已經(jīng)成為一個消耗內(nèi)存的主要部分。 今晚 Java 9 將正式發(fā)布。Java 9 的新特性都列在官方頁面當(dāng)中,本文介紹值得你關(guān)注的其中幾個點: ? 進(jìn)程操作改進(jìn)(JEP 102: Process API Updates) 新增的 java.lang...
摘要:來來來,花分鐘看看的七大新特性,還有代碼樣例。本地是指方法內(nèi)的變量聲明。從開始,這個正式進(jìn)入標(biāo)準(zhǔn)庫包。同步請求會阻止當(dāng)前線程。可喜的是,如果嘗試改變不可變集合,會通過發(fā)出警告是在中引入的,增加了三個新方法。 現(xiàn)在Java有多元化的發(fā)展趨勢,既有JS又有C++還有C#的影子,不學(xué)習(xí)那是不行滴。來來來,花5分鐘看看Java9-Java11的七大新特性,還有代碼樣例。Java11 發(fā)布了,然...
以下是Java技術(shù)棧微信公眾號發(fā)布的關(guān)于 Java 的技術(shù)干貨,從以下幾個方面匯總。 Java 基礎(chǔ)篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進(jìn)階篇 Java 新特性篇 Java 工具篇 Java 書籍篇 Java基礎(chǔ)篇 8張圖帶你輕松溫習(xí) Java 知識 Java父類強(qiáng)制轉(zhuǎn)換子類原則 一張圖搞清楚 Java 異常機(jī)制 通用唯一標(biāo)識碼UUID的介紹及使用 字符串...
摘要:新特性概述系列一安裝及使用系列二運行系列三模塊系統(tǒng)精要系列四更新系列五系列六系列七系列八系列九與的區(qū)別遷移注意事項參數(shù)遷移相關(guān)選項解析使用構(gòu)建實例使用示例帶你提前了解中的新特性 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:就在前段時間,官方宣布正式發(fā)布,可在生產(chǎn)環(huán)境中使用這無疑對我們來說是一大好的消息。途中列舉了的正式發(fā)布時間以及支持計劃。長期支持,表示會對其做長期的補(bǔ)丁安全等擴(kuò)展支持等。 showImg(https://segmentfault.com/img/remote/1460000016796660); 就在前段時間,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發(fā)布,可在...
閱讀 2943·2021-10-14 09:43
閱讀 2888·2021-10-14 09:42
閱讀 4670·2021-09-22 15:56
閱讀 2376·2019-08-30 10:49
閱讀 1597·2019-08-26 13:34
閱讀 2388·2019-08-26 10:35
閱讀 609·2019-08-23 17:57
閱讀 2032·2019-08-23 17:15