Java9在語言上並無添加太多的新特性,但在使用、性能上作了很改進。html
Java9添加了模塊化的概念,使得以前的控制訪問權限有了改變。
以前:java
Java9shell
能夠看到,對public類又作了進一步的限制,主要是對模塊間的依賴作出限制,使得模塊可以控制那些public類型可以被其餘模塊讀取,以及該模塊須要使用其餘模塊的類型。oracle
在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; }
以上是最簡單的模塊使用方式。工具
即在不一樣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
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."); } }
提供互交式的工具。ui
$ 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>
Java6以及以前的版本中,在使用一些資源時,一般會使用try/catch語句,而且在finally語句中來關閉資源,Java7作了改進,Java9也作了一點改進。code
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(); } } }
更多更詳細的特性,能夠參照如下:htm
Oracle
Blog