最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

初始JAVA模塊化開發(fā)的超詳細步驟(適合菜鳥)

 更新時間:2025年03月25日 09:00:13   作者:Wooden-Flute  
這篇文章主要介紹了初始JAVA模塊化開發(fā)的超詳細步驟,詳細解釋了模塊描述符的職責、模塊路徑的概念以及如何使用命令行運行模塊化Java程序,文中通過圖文介紹的非常詳細,需要的朋友可以參考下

一、概述

這里講解,如何使用IntelliJ IDEA創(chuàng)建一個簡單的模塊化Java應(yīng)用。

這里需要知道,Intellij IDEA項目基本的構(gòu)建單元也叫“模塊(module)”,但這里的模塊和JPMS中的“模塊”不是一回事。Intellij中的模塊是“構(gòu)建單元”,它可以用于組織多種類型的開發(fā)資源。在實際開發(fā)中,可以使用Intellij模塊來創(chuàng)建和生成JPMS模塊。

二、創(chuàng)建步驟

1、打開Intellij IDEA,創(chuàng)建一個名為MyJavaModuleApp的Java項目。

每個IntelliJ IDEA 項目,都至少包容有一個模塊,在本例中,最頂層的就是在這里起了名字的模塊,可以將它看成是本項目的默認模塊。

2、向示例項目中添加”模塊描述符“文件

moduleinfo.java 文件應(yīng)該位于IntelliJ 模塊的 src 文件夾下。

module之后,跟著的就是模塊名,由于所有 模塊都位于一個全局命名空間中,因此,模塊名稱必須是唯一的,并且應(yīng)該與模塊文件夾的名字相同。

 3、創(chuàng)建多模塊的IntelliJ 項目

向IntelliJ 項目添加新模塊:

  • 一個 IntelliJ 項目可以包容多個模塊,這在實際開發(fā)中非常常見。
  • 通常會將代碼等相關(guān)資源按照“職責”進行分類和匯總,把密切相關(guān)的東西都放在一起,保存在某個模塊中,然后,再建立起各個模塊之間的依賴關(guān)系。
  • 達到一定規(guī)模的 Java 項目,不應(yīng)該將所有的東西全部放在一個模塊中。

4、IntelliJ項目添加“新模塊”對話框

從IntelliJ IDEA 的“ New Module ”對話窗口可以看出,它的“模塊”,是廣義的模塊,在一個 IntelliJ IDEA 項目中,可以創(chuàng)建 N 種類型的“模塊”。

創(chuàng)建IntelliJ 模塊的過程,與創(chuàng)建一個 IntelliJ 項目的過程幾乎一樣,這也說明了,你可以把 IntelliJ 模塊,看成是一個 IntelliJ 的“子項目”。 

模塊創(chuàng)建好之后,采用與前面一樣的方法,為新模塊添加 module info.java 文件。

  • 每個模塊,都要有自己的module info.java 。
  • 模塊名稱必須是唯一的。 

解釋1:模塊聲明與模塊描述符

  • moduleinfo.java 稱為“ 模塊聲明( Module Declaration )文件 ”,它編譯之后稱為“ 模塊描述符( Module Descriptor )。
  • 模塊聲明文件必須存在于模塊目錄的根目錄中。它與其他源文件一起編譯成一個名為 module info .class 的二進制類文件 。
  • 如果使用javac 一次性編譯多模塊的 Java 模塊化項目 中,模塊名稱必須與包含模塊描述符的目錄名稱相匹配。否則,編譯器將拒絕編譯并報告匹配錯誤。

解釋2:模塊化的jar包

  • 包容有模塊描述符的 JAR 包,稱為模塊化 JAR 包 。
  • 模塊描述符必須放在模塊化JAR 包的根目錄下,以方便 JPMS 識別。
  • 模塊化JAR 可以當成普通的JAR 來使用,你只需要把它放到類路徑中去就行了。 

5、給MyLibModule模塊添加可復(fù)用的代碼

向MyLibModule 模塊中添加一個包,再添加一個類,然后里面寫了一個 getInfo() 方法,返回一個“提示信息”。

模塊化的應(yīng)用中,所有的類,都應(yīng)該歸屬于一個有名字的包。

6、修改MyLibModule模塊的module info.java

在module info.java文件中,使用 exports 導(dǎo)出“ com.jinxuliang”包。

MyLibModule模塊導(dǎo)出了一個包,此包中所有的公有類(本例為 MyPublicFunc現(xiàn)在就可以被其他模塊所使用。簡單地說,只要在 module info.java文件中導(dǎo)出一個包之后,包中所有聲明為public 的類,就可以被外部所訪問了。 

在模塊化的Java 應(yīng)用中,如果沒有在 module info.java 文件中導(dǎo)出包,那么,包中的類即使被聲明為 public ,外界也無法使用它。

總結(jié)一下模塊描述符的職責:

所謂“模塊描述符”,其實就是放在module info.java文件中的內(nèi)容編譯之后的結(jié)果(是一個 .class 文件), 它描述了模塊相關(guān)的重要信息:

  • 模塊的名字
  • 本模塊依賴于其他哪些模塊的哪些包
  • 本模塊導(dǎo)出了哪些包和服務(wù)
  • 本模塊是否允許外界使用反射,讀取特定包中的類型。

7、建立模塊化之間的依賴關(guān)系

File---->Project Structure

 點擊+

 選擇3 模塊依賴關(guān)系

點擊確定

這里所建立好的依賴關(guān)系,其實是編譯時的依賴關(guān)系,僅在編譯時起作用。 

8、修改MyJavaModuleApp模塊的module info.java

  • 使用 requires 語句導(dǎo)入本模塊所需要調(diào)用的代碼所在的模塊。
  • 如果本模塊中也有代碼需要供給外界使用,則可以用 exports 語句導(dǎo)出。 

9、編寫測試代碼測試模塊的調(diào)用

這里需要注意一個點,編寫的測試代碼也必須包含在一個軟件包里面,否則無法運行。因為模塊化的應(yīng)用中,所有的類,都應(yīng)該歸屬于一個有名字的包。

然后運行即可 

由于本模塊使用requires關(guān)鍵字導(dǎo)入了 MyLibModule 模塊,所以可以使用它所導(dǎo)出的MyPublicFunc 類。

三、模塊路徑的概念

  • 當編譯和運行模塊時,Java編譯器和運行時使用模塊描述符來解析正確的模塊。模塊是從模塊路徑(module path)中解析出來的,而不是類路徑(class path)。類路徑用于構(gòu)建編譯項目所需要用到的類型清單,而模塊路徑則可以看成是一個項目所引用的模塊的清單。
  • java命令行有一個module-path參數(shù),用于指定模塊路徑。
  • 當使用java命令運行一個模塊時,它到模塊路徑中去查找所有模塊,裝載其模塊描述符,通過讀取模塊描述符中給定的exports和requires等信息,就能構(gòu)建出程序中用到的所有模塊的依賴圖。

給IntelliJ模塊添加“模塊依賴”時,其實是為了指定編譯信息。真正的Java模塊依賴信息,是放在module-info.java中的。

四、使用命令行運行模塊后的Java程序

使用命令行運行模塊實戰(zhàn)演練

操作如圖

像我的操作就是 

-m 是“ module ”的簡寫。

就可以運行成功。而要運行的MyFirstModuleApp.class所在的文件夾是這樣的

 小結(jié)1:使用命令行運行模塊化Java應(yīng)用

  • --module path ,簡寫為-p :代表依賴的模塊保存的位置
  • --module ,簡寫為 -m: 表示要啟動的初始模塊,如果此模塊中沒有定義程序入口點,則可以采用“模塊名 主類”的方式指定程序入口點。

小結(jié)2:Java模塊編寫的“基本準則” 

區(qū)別兩個性 

可讀性(readability):如果A requires B,我們就說:“模塊B對于模塊A來說,是可讀的。讀取其他模塊意味著可以訪問其導(dǎo)出包中的類型。”

可訪問性:

默認情況下,模式可讀性必須顯示聲明,不能傳遞

區(qū)分編譯時和運行時

總結(jié) 

到此這篇關(guān)于初始JAVA模塊化開發(fā)的文章就介紹到這了,更多相關(guān)初始JAVA模塊化開發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多態(tài)概念、實現(xiàn)機制與實踐應(yīng)用詳解

    Java多態(tài)概念、實現(xiàn)機制與實踐應(yīng)用詳解

    多態(tài)是指同一個方法在不同對象上具有不同的行為,通過多態(tài)程序可以在運行時決定調(diào)用哪個方法,從而提高代碼的靈活性和可擴展性,這篇文章主要介紹了Java多態(tài)概念、實現(xiàn)機制與實踐應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • Java使用Collections.sort()排序的示例詳解

    Java使用Collections.sort()排序的示例詳解

    這篇文章主要介紹了Java使用Collections.sort()排序的示例詳解,Collections.sort(list, new PriceComparator());的第二個參數(shù)返回一個int型的值,就相當于一個標志,告訴sort方法按什么順序來對list進行排序。對此感興趣的可以了解一下
    2020-07-07
  • Java中遍歷數(shù)組使用foreach循環(huán)還是for循環(huán)?

    Java中遍歷數(shù)組使用foreach循環(huán)還是for循環(huán)?

    這篇文章主要介紹了Java中遍歷數(shù)組使用foreach循環(huán)還是for循環(huán)?本文著重講解for語句的語法并給出使用實例,同時總結(jié)出盡量使用foreach語句遍歷數(shù)組,需要的朋友可以參考下
    2015-06-06
  • Java EE過濾器優(yōu)先級控制的實例解讀

    Java EE過濾器優(yōu)先級控制的實例解讀

    通過使用@Priority注解,可以控制JavaEE應(yīng)用中過濾器的執(zhí)行順序,在上面的示例中,我們通過設(shè)置不同的優(yōu)先級,實現(xiàn)了TimeFilter和LogFilter的執(zhí)行順序控制
    2025-02-02
  • Java計算Date類時間差實例代碼演示

    Java計算Date類時間差實例代碼演示

    最近工作中遇到需要計算時間差,這里給大家總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于Java計算Date類時間差的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Graceful Response 構(gòu)建 Spring Boot 響應(yīng)處理的方法

    Graceful Response 構(gòu)建 Spring Boot 響應(yīng)

    Graceful Response是一個Spring Boot技術(shù)棧下的優(yōu)雅響應(yīng)處理器,提供一站式統(tǒng)一返回值封裝、全局異常處理、自定義異常錯誤碼等功能,本文介紹Graceful Response 構(gòu)建 Spring Boot 下優(yōu)雅的響應(yīng)處理,感興趣的朋友一起看看吧
    2024-01-01
  • Mybatis Log Plugin的使用方式

    Mybatis Log Plugin的使用方式

    這篇文章主要介紹了Mybatis Log Plugin的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java的List集合框架之Vector詳細解析

    Java的List集合框架之Vector詳細解析

    這篇文章主要介紹了Java的List集合框架之Vector詳細解析,List接口繼承Collection,Collection繼承于Iterable,List接口實現(xiàn)類分為Vector、ArrayList、LinkedList,Vector底層是一個Object數(shù)組,需要的朋友可以參考下
    2023-11-11
  • Idea為java程序添加啟動參數(shù)(含:VM?options、Program?arguments、Environment?variable)

    Idea為java程序添加啟動參數(shù)(含:VM?options、Program?arguments、Environme

    設(shè)置啟動參數(shù)的意義就是當啟動程序時,程序會優(yōu)先讀取idea的配置參數(shù),這樣就可以不用修改配置文件,下面這篇文章主要給大家介紹了關(guān)于Idea為java程序添加啟動參數(shù)(含:VM?options、Program?arguments、Environment?variable)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • SpringMvc獲取頁面中的參數(shù)方法詳解

    SpringMvc獲取頁面中的參數(shù)方法詳解

    這篇文章主要介紹了SpringMvc獲取頁面中的參數(shù)方法詳解,獲取頁面的參數(shù)通常都是讓類實現(xiàn)設(shè)置HttpServletRequest request接口然后重寫接口中的方法的辦法來得到參數(shù),但是在Springmvc中有其他的獲取方法,需要的朋友可以參考下
    2023-10-10

最新評論

内江市| 尚义县| 府谷县| 和林格尔县| 巫溪县| 泰顺县| 沅陵县| 沿河| 金山区| 疏附县| 灵丘县| 秦皇岛市| 中西区| 石渠县| 临邑县| 大城县| 渭源县| 嘉义市| 西充县| 江川县| 三明市| 高州市| 迁安市| 台前县| 万全县| 陈巴尔虎旗| 北安市| 阿图什市| 清徐县| 桐庐县| 锦州市| 三门县| 平原县| 从化市| 肃宁县| 莱芜市| 安顺市| 莎车县| 措美县| 富蕴县| 泊头市|