Java 9 特性以及解決的問題
我們將探討關於Java 9模塊化系統的以下主題:
1.介紹
Oracle 將Java 9從2017年3月延期到2017年9月進行發行。
我們知道, Java SE 8提供了三大新特性(加上少量改進和新特性)。
- Lambda 表達式
- Stream API
- Date API
同樣地, Java SE 9提供了三大新特性(加上少量改進和新特性): - Java模塊系統(Jigsaw項目)
- Java REPL(交互式編程)
- Milling project coin(主要是語法改進的一個項目,Java7的時候就已經開始)
2.JavaSe9之Jigsaw Project
Jigsaw項目的主要目標:
模塊化JDK
我們知道,當前JDK系統是很大的。因此他們決定劃分JDK成小模塊得到一定數量的好處
模塊化源代碼
當前原始代碼jar文件是非常大的,特別是rt.jar是相當的大。 因此他們劃分Java原始代碼成更小的模塊。
模塊化執行時間的影像
這個特性的主要目標是“調整JDK和JRE執行時間的影像系統的支撐”。
壓縮大部分內部的API
這個特性的主要目標是“使大多JDK的內部APIs不能進入,但是留下一些重要,用途廣泛的內部的APIs”。
Java平臺模塊系統
這個特性的主要目標“允許用戶創造他們的模塊開發他們的應用”。
jlink :Java連接器
這個jlink工具的主要目標“允許用戶在他們的應用中創建可執行文件。
3.當前Java系統的問題
Java SE 8或更加早期的系統在開發或提供Java應用時有以下問題:
因爲JDK是太大的,對於小設備很難進行等比例縮減。Java SE 8提出了3種緊湊類型解決這個問題:compact1、compact2和compact3。 但是這個問題並沒有得到有效的解決。
Jar文件,像rt.jar等jar文件太大的以至於不能使用在小設備和應用中。
因爲JDK是太大的,我們的應用或設備不能支持更好的平臺.
由於修飾符是public的緣故,每個人都可以通過此來進行訪問,所以在當前Java系統的封閉性不是很強。
由於JDK,Jre過於龐大,以至於很難進行測試和維護應用。
由於public的關係,Java比較開放。不可避免的能訪問象sun., .internal.*等的一些內部不重要的APIs。
由於上述關係,用戶可以訪問到一些內部的api,所以安全性方面也是一個大問題。
應用太大。
組件間的鬆耦合的支持稍微薄弱
4.Java9模塊系統的特性
爲了解決所有這些問題, 所以Oracle Corp在Java SE 9中發佈了Java SE 9模塊系統.
在Java SE 9中分離了JDK, JRE,jar等爲更小的模。因此我們可以方便的使用任何我們想要的模塊。因此縮減Java應用程序到小設備是非常容易的。
更加容易的測試和維護
支持更好的平臺
public不再僅僅是public。現在已經支持非常強的封閉性(不用擔心,後邊我們會用幾個例子來解釋)。
我們不能再訪問內部非關鍵性APIs了。
模塊可以非常安全地幫助我們掩藏那些我們不想暴露的內部細節,我們可以得到更好的Security.
應用會變的非常小,因爲我們可以只使用我們要用的模塊。
組件間的鬆耦合變得非常容易。
更容易支持唯一責任原則(SRP)。
5.Jdk9和Jdk8的對比
我們知道JDK軟件都包含什麼。在安裝JDK 8軟件以後,我們能看到目錄中包含bin、jre、lib等解壓在Java主目錄中。在Jdk9中,Oracle Corp稍微改變了這個文件夾的結構如下所示:
- JDK 8文件夾結構:
- JDK 9文件夾結構:
我們可以發現在JDK 9中不包含JRE的。 JRE被分離到一個分開的文件夾。 但是JDK 9軟件包含一個新的文件夾“jmods”。它包含一套Java 9模塊,如下所示:
在JDK 9,沒有rt.jar和tools.jar文件。
- 注:截止到今天, “jmods”包含98個模塊。在後續的版本也許會增加。 “jmods”文件夾在$ {JAVA_HOME}
/jmods中才可用。這些叫JDK Modules. *
6.Java9模塊化是什麼?
Java9中的模塊是代碼、數據和有些資源的自描述的集合。它是一套相關package、type(類、抽象類,接口等)與代碼&數據和資源。
7.Java9模塊化系統之母
到現在爲止Java 9模塊系統提供了98個模塊。 並且Oracle Corp已經分離JDK的jars和Java SE規格到兩套Modules裏.
- 所有的JDK Mdoules與 “jdk.*”一起啓動。
- 所有Java SE規格模塊與“java.*”一起啓動。
- Java 9模塊系統有一個“java.base”模塊。它叫作基本的模塊。 它是一個獨立模塊並且沒有依賴於所有其他模塊。 默認情況下,其他模塊依賴於這個模塊。
所以“java.base”模塊是被成爲Java9模塊化系統之母。
它是所有JDK模塊和用戶定義的Modules的默認模塊.
8.Java9和Java8程序的對比。
使用Java 5,6,7或者8.,我們已經開發了許多Java應用程序。我們知道Java 8或更早的應用是什麼樣的,包含什麼東西。
簡而言之,Java 8的應用會是如下所示:
Java 9的應用與之前的沒有太多的不同。 他只是引入了一個新的組件叫module,如果你要用它就需要將相關聯的包集合分組到同一個組中。再有就是module修飾符(“module-info.java”).
應用的其餘同初期版本應用一樣如下所示:
像Java 8應用一樣,頂層組件是package,在Java9中則使用module作爲頂層組件。
簡而言之,我們可以說Java 9模塊包含以下主要部分:
- one Module
- Module Name
- Module Descriptor(描述符)
- 包集合
- Types和Resources集合
**本文來自: