目錄
主要亮點
Java 9 模組系統
Java 9 模組的型別
1.應用模組
2.自動模組
3.未命名模組
模組化描述符
Java 9 模組系統應用的模組
How to Create a New Java 9 Module?
Comparison Table of JDK 8 and JDK 9
結論
常見問題
Q1。如何將舊應用程式遷移到 JAVA 9?
 Q2。我如何知道系統提供了哪些模組?
Q3。 JAVA需要安裝IDE嗎?
 Q4。如何存取我的模組中的公共包?
首頁 Java java教程 Java 9 模組

Java 9 模組

Aug 30, 2024 pm 03:53 PM
java

Java 9 模組是作為包集合引入的新實體,以提供某種特性或功能。 Java 9模組是Java開發工具包重新排列和分類為模組後的第一個版本。它也稱為 Java 9 平台模組系統 (JPMS)。 在 java 9 中,您可以透過只包含所需的模組來減少執行時間大小。例如,對於不支援 GUI 的設備,您可以建立不包含 GUI 模組的執行時間。

Java 9 模組

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

 

主要亮點

  • Java 9 模組是套件的高階抽象的實作。
  • 它將與功能相關的所有套件打包到一個模組中,總共 95 個模組。它提供了更好的平台完整性和強大的封裝性。
  • 它允許創建單獨的 Java 模組作為 Java 應用程式或 Java API 的模組化 JAR 檔案。

Java 9 模組系統

  • 在 Java 9 模組中,功能相關的套件被聚合到可重複使用的群組中,稱為模組。
  • Java 9 模組可能包含資源(例如映像和 XML 檔案)。 java.base模組是一個獨立的模組,是每個模組所必需的。
  • 系統模組是標準的,其名稱以java開頭。
  • 例如,JavaFX 模組(名稱以 JavaFX 開頭)、JDK 模組(名稱以 jdk 開頭)、Oracle 模組(名稱以 oracle 開頭)。

Java 9 模組的型別

1.應用模組

  • 這些模組是由程式設計師創建的。
  • 組裝路徑非官方JAR包含編譯後的module-info.a類文件,其中包含模組的名稱和定義。

2.自動模組

  • 將現有 JAR 檔案新增至模組時,會建立自動模組。
  • JAR 的名稱成為模組的名稱。

3.未命名模組

  • 它是載入到類別路徑但未載入到模組路徑中的類別或 JAR。
  • 它是一個包羅萬象的模組,用於保持與先前編寫的 Java 程式碼的向後相容性。

模組化描述符

  • module-info.java 檔案包含模組定義或描述模組的元資料。
  • 編譯 module-info.java 時,我們得到包含模組描述符的 module-info.class,該描述符儲存在模組的根資料夾中。
  • 模組化描述符由一個或多個導出組成,並且需要一個子句。
  • 它是一個獨立的模組,可以將套件匯出到其他模組,並且可以使用其他模組的套件。
  • 元資料包含三件事,唯一名稱、exports 子句和requires 子句。
  • 唯一名稱:為模組指定的名稱。

代碼:

module eg.com.module1 
{

}
登入後複製
  • 匯出子句:模組中的套件可以匯出,以便其他模組可以使用它們。

代碼:

module eg.com.module1 
{
   exports eg.com.module1.service;
}
登入後複製
  • Requires 子句:當你需要其他模組的套件時使用。

代碼:

{
   requires eg.com.module1;
}
登入後複製

Java 9 模組系統應用的模組

  • 從jdk的bin資料夾列出JDK集合的模組。在 CLI java –list-modules
  • 中執行以下命令
  • 關鍵字 module 用來宣告模組。模組主體用大括號括起來,如: module modulename { }
  • exports 模組指令使所有其他模組中的程式碼都可以存取該模組的套件。
  • 匯出...來定義合格報告。 可以在逗號分隔的清單中精確指定可以存取匯出套件的套件清單。

代碼:

module com.educba.util 
{
exports com.educba.app;
exports com.educba.security to com.educba.client, com.educba.producer;
}
登入後複製
  • 當使用開放模組指令時,給定模組中的所有套件都可以在運行時透過反射到所有其他模組來存取。若要允許僅執行時間存取模組中的所有套件,您可以開啟整個模組,如下所示:

代碼;

open module <em>modulename</em>

{
// module directives
}
登入後複製
  • To allow runtime-only access to packages in a module. An open module directive of the form opens package- can be used. The code in other modules can access the public types of a package and its nested public and protected types at runtime only. Reflection can be used to access all the types and the types’ members in the specified package.
  • The code in the listed modules can access the public types of a package and its nested public and protected types at runtime only. Reflection to code in the specified modules can be used to access all of the types and types’ members in the specified package.

How to Create a New Java 9 Module?

  • Create a directory structure
src\com.educba\com\educba
登入後複製
  • In the command prompt
mkdir –r src\com.educba\com\educba
登入後複製
  • Create a new module in a text editor and save it as a java file module-info.java.
module com.educba
{ }
登入後複製
  • Set the environment variable JAVA_HOME to the path where Java is installed.

For example, JAVA_HOME C:\Program Files\Java\jdk-9\bin

Add %JAVA_HOME% to PATH in control Panel->system->advanced system setting->environment variables.

  • To see the compiled module descriptor in the CLI.

Code:

>javap mods/com.educba/module-info.class
登入後複製

Output:

Java 9 模組

It shows requires java.base in the modules definition, though we had created an empty module. It is because java.base is the basic and independent module. All other modules depend on it.

Comparison Table of JDK 8 and JDK 9

The most obvious difference between JDK 8 and JDK 9.

Feature Java 8 Java 9
Top Level component Package Module
New features launched ●       Lambda Expressions

●       Stream API

●       Date API

●       Java Module System (Jigsaw Project)

●       Java REPL

●       Milling Project Coin

Performance Compromised performance due to big size of jdk Improved performance
Testing and maintaining applications Difficult with large size of JRE Easy with REPL and reduced size depending on modules included. JShell or REPL: Read and evaluate Print Loop for easy execution and testing of   Java Constructs like class, interface, enum, object, and statements easily.
Security It is compromised because of no encapsulation. Internal APIs can be accessed easily by users and potential hackers. Reflection could be used to learn about private members too. String security as Reflection does not provide access to private members. Only those exposed by export keywords are available through reflection.
Packaging format JAR JMOD can include native code and configuration files.

結論

Java 9 確實是最受歡迎的 Java 程式碼重組,使其與分散式架構的新編碼技術相容。它透過選擇包含所需的模組來幫助減少可執行檔的大小,從而提高效能。強大的封裝性提高了安全性,同時減少了潛在駭客可用的類別。模組化提供了依賴聲明和確定的透明度。

常見問題

Q1。如何將舊應用程式遷移到 JAVA 9?

答案:你可以在Java 9中編譯你的遺留應用程式。在編譯時,你會遇到那些不屬於Java 9模組化結構的程式碼部分的錯誤。這裡你需要花一些時間是時候包含所需的模組了。您可以使用 Jshell 測試新程式碼以獲得所需的輸出。

 Q2。我如何知道系統提供了哪些模組?

答案: java –list-modules 可用來列出模組。您需要參考文件來了解它們的功能。

Q3。 JAVA需要安裝IDE嗎?

答:不。這取決於您對命令列介面的熟悉程度。 IDE 在後端完成許多使用者不知道的工作。 CLI 是識別問題並解決問題的最佳選擇。

 Q4。如何存取我的模組中的公共包?

答案:您需要在模組的模組定義中加入以下內容才能存取公用包,info.javarequired_pa​​ckage_name

以上是Java 9 模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP的影響:網絡開發及以後 PHP的影響:網絡開發及以後 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP:許多網站的基礎 PHP:許多網站的基礎 Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP與Python:用例和應用程序 PHP與Python:用例和應用程序 Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

See all articles