<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java 模塊教程 > 原文: [https://howtodoinjava.com/java9/java-9-modules-tutorial/](https://howtodoinjava.com/java9/java-9-modules-tutorial/) JPMS(Java 平臺模塊系統)是 Java 9 的主要增強特性。它也被稱為 [Jigsaw 項目](https://openjdk.java.net/projects/jigsaw/)。 在此 **Java 9 模塊示例**中,我們將學習有關模塊的一般知識以及將來開始編寫模塊化代碼時編程風格的變化。 ```java Table of Contents What is a Module Introduction to Java 9 Modules How to Write Modular Code Summary ``` ## 什么是一般模塊 在任何編程語言中,模塊都是包含代碼的(類似包的)工件,元數據描述了模塊及其與其他模塊的關系。 理想情況下,從編譯時一直到運行時都可以識別這些工件。 通常,任何應用程序都是多個模塊的組合,這些模塊可以一起執行業務目標。 就應用程序架構而言,模塊應代表特定的業務能力。 它應具有該特性的自足能力,并且應僅公開使用模塊特性的接口。 要完成其任務,它可能依賴于其他模塊,應明確聲明其他模塊。 因此,簡而言之,一個模塊應遵循三個核心原則: * #### 強封裝 [封裝](//howtodoinjava.com/object-oriented/encapsulation-in-java-and-its-relation-with-abstraction/)意味著隱藏實現細節,這些細節對于正確使用模塊不是必需的。 目的是封裝的代碼可以自由更改,而不會影響模塊的用戶。 * #### 穩定的抽象 [抽象](//howtodoinjava.com/object-oriented/understanding-abstraction-in-java/)有助于使用接口(即公共 API)公開模塊特性。 任何時候,您想更改模塊代碼中的業務邏輯或實現,更改對模塊用戶都是透明的。 * #### 顯式依賴 模塊也可以依賴于其他模塊。 這些外部依賴項必須是模塊定義本身的一部分。 模塊之間的這些依賴關系通常表示為圖形。 在應用程序級別查看該圖后,您將更好地了解應用程序的架構。 ## Java 9 模塊簡介 在 Java 9 之前,您已經擁有“*包*”來根據業務特性對相關類進行分組。 與包一起,您還具有“[訪問修飾符](//howtodoinjava.com/object-oriented/java-access-modifiers/)”,以控制其他類或包的可見內容和隱藏內容。 到目前為止,它一直運行良好。 Java 對封裝和抽象有強大的支持。 但是,顯式依賴關系是事情開始崩潰的地方。 在 Java 中,依存關系用`import`語句聲明; 但嚴格來說,它們是“編譯時”結構。 編譯代碼后,沒有任何機制可以清楚地說明其運行時依賴項。 實際上,Java 運行時相關性解析是一個問題很大的領域,以至于已經創建了專門的工具來解決此問題,例如 [gradle](//howtodoinjava.com/gradle/gradle-tutorial-installation-and-hello-world-example/) 或 [maven](//howtodoinjava.com/maven/) 。 同樣,很少有框架開始捆綁其完整的運行時依賴關系,例如 [SpringBoot](//howtodoinjava.com/spring/spring-boot/spring-boot-tutorial-with-hello-world-example/) 項目。 使用新的 **Java 9 模塊**,我們將具有更好的特性來編寫結構良好的應用程序。 此增強特性分為兩個區域: 1. 模塊化 JDK 本身。 2. 提供一個模塊系統供其他應用程序使用。 Java 9 模塊系統具有一個“`java.base`”模塊。 稱為“基本模塊”。 這是一個獨立模塊,不依賴于任何其他模塊。 默認情況下,所有其他模塊都依賴于“`java.base`”。 在 Java 9 中,模塊可幫助您封裝包和管理依賴項。 所以通常 * 類是字段和方法的容器 * 包是類和接口的容器 * 模塊是包的容器 如果您不知道要尋找的特定內容,您將不會感覺到普通代碼和模塊化代碼之間的主要**區別**。 例如: 1. 模塊通常只是一個 jar 文件,其根目錄具有`module-info.class`文件。 2. 要使用模塊,請將 jar 文件而不是`classpath`包含在`modulepath`中。 添加到類路徑的模塊化 jar 文件是普通的 jar 文件,`module-info.class`文件將被忽略。 ## 如何編寫模塊化代碼 閱讀以上所有概念后,讓我們看看如何在現實中編寫模塊化代碼。 我正在使用 Netbeans IDE,因為它具有對 Java 9 的良好的[早期支持(截至今天)。](http://wiki.netbeans.org/JDK9Support) #### 創建 Java 模塊化項目 創建新的模塊化項目。 我已經創建了名稱`JavaAppOne`。 ![Create Java Modular Project](https://img.kancloud.cn/90/c0/90c00955974dda1704b54d1a9af93b96_771x461.png) 創建 Java 模塊化項目 ![Create Java Modular Project - Step 2](https://img.kancloud.cn/80/93/8093ae385ae165bf698d8348583386dc_748x377.png) 創建 Java 模塊化項目 – 步驟 2 #### 創建 Java 模塊 現在,在此項目中添加一個或兩個模塊。 ![Create New Module](https://img.kancloud.cn/34/7c/347c9d899d0c05e9e73b9020ba36b061_721x376.png) 創建新模塊 我添加了兩個模塊`helloworld`和`test`。 讓我們看看他們的代碼和項目結構。 ![Java 9 Modules Project Structure](https://img.kancloud.cn/09/ef/09efa0a387cb8adf7f191285259a9cf7_304x289.png) Java 9 模塊項目結構 `/helloworld/module-info.java` ```java module helloworld { } ``` `HelloWorldApp.java` ```java package com.howtodoinjava.demo; public class HelloWorldApp { public static void sayHello() { System.out.println("Hello from HelloWorldApp"); } } ``` `/test/module-info.java` ```java module test { } ``` `TestApp.java` ```java package com.test; public class TestApp { public static void main(String[] args) { //some code } } ``` 到目前為止,模塊是獨立的。 現在假設,我們想在`TestApp`類中使用`HelloWorldApp.sayHello()`方法。 如果嘗試使用該類而不導入模塊,則會出現編譯時錯誤“包`com.howtodoinjava.demo`包不可見”。 #### 導出包和導入模塊 為了能夠導入`HelloWorldApp`,您必須首先從`helloworld`模塊中導出“`com.howtodoinjava.demo`”包,然后在`test`模塊中包含`helloworld`模塊。 ```java module helloworld { exports com.howtodoinjava.demo; } module test { requires helloworld; } ``` 在上面的代碼中,`requires`關鍵字表示依賴性,`exports`關鍵字標識可導出到其他模塊的包。 僅當顯式導出包時,才能從其他模塊訪問它。 默認情況下,無法從其他模塊訪問模塊中未導出的包。 現在您將可以在`TestApp`類中使用`HelloWorldApp`類。 ```java package com.test; import com.howtodoinjava.demo.HelloWorldApp; public class TestApp { public static void main(String[] args) { HelloWorldApp.sayHello(); } } Output: Hello from HelloWorldApp ``` 讓我們來看一下模塊圖。 ![Module Graph](https://img.kancloud.cn/5b/dc/5bdc0ff21ce5bb6ab3271a2b51c337a6_480x335.png) 模塊圖 從 Java 9 開始,“`public`”僅對該模塊內部的所有其他包表示“`public`”。 僅當導出包含“`public`”類型的包時,其他模塊才能使用它。 ## 總結 模塊化應用程序具有許多優點,當您遇到具有非模塊化代碼庫的應用程序時,您會更加欣賞。 您必須聽說過諸如“*意大利面條架構*”或“*凌亂的整體*”之類的術語。 模塊化不是靈丹妙藥,但它是一種架構原理,如果正確應用,可以在很大程度上防止這些問題。 借助 JPMS,Java 已邁出了一大步,成為了模塊化語言。 決定是對還是錯,只有時間會證明一切。 第三方庫和框架如何適應和使用模塊系統將會很有趣。 以及它如何影響開發工作,我們每天都在做。 [下載源碼](//howtodoinjava.com/wp-content/downloads/Java9ModuleExample.zip) 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看