日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Java 模块系统

發布時間:2025/3/15 windows 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 模块系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是Java module

與Java 中的package有些類似,module引入了Java代碼分組的另一個級別。每個這樣的分組(module)都包含許多子package包。通過在一個模塊的源代碼文件package的根部,添加文件module-info.java來聲明該文件夾及其子文件夾為一個模塊。該文件語法如下:

module xxx.yyy{....}

其中xxx.yyy是模塊module聲明的名稱,不是package名稱。

從Java 9開始,原有的Java標準庫已經由一個單一巨大的rt.jar分拆成了幾十個模塊,這些模塊以.jmod擴展名標識,可以在$JAVA_HOME/jmods目錄下找到它們:

二、模塊導出package

文件module-info.java可以指定該模塊下面的哪些package對外可見、可訪問。通過一個新的關鍵字exports來實現該功能。

module xxx.yyy{exports com.zzz;}

com.zzz代表一個package。

需要注意的是:即使給定package包中的類是public的,如果未通過'exports'顯式導出其程序包,則它們在模塊外部也是不可見的(在編譯時和運行時都是如此)。

三、模塊導入package

如果另一個模塊想要使用被導出的package包中的類,可以用requires關鍵字在其module-info.java文件中來導入(讀取)目標模塊的package包。

module aaa{requires xxx.yyy; }

四、Java module的意義

在筆者看來,Java 9引入module 模塊化管理系統,更多的是從安全性的角度考慮。Java 代碼中90%以上的漏洞都是由反射和訪問權限控制粒度不足引起的,Java 9的模塊化系統正好能解決這個問題。Java 9 module提供另一個級別的Java 代碼可見性、可訪問性的控制。比如說:我們都知道當一個class被修飾為private的時候,意味著這個類是內部類。對于頂級類(外部類)來說,只有兩種修飾符:public和默認(default)。這也就意味著一個問題,有些public class我們本來是打算在jar包定義的范圍內使用的,但是結果卻是任何引入了這個jar的項目都可以使用這個jar里面所有的public class代碼。也就是我們的原意是在有限范圍內提供公開訪問,結果卻是無限制的對外公開。在引入Java 9模塊化之后,可以實現有限范圍內的代碼public訪問權限,將代碼公開區分為:模塊外部有限范圍的公開訪問和模塊內部的公開訪問。

五、例子

  • 模塊一

    module-info.java
module export.module {exports com.module.bean; }
  • 模塊二

    module-info.java
module mymodule {requires export.module; }
  • 測試
public class TestModule {public static void main(String[] args) {Person person = new Person();person.setId(1);System.out.println(person.getId());} }輸出:1
  • 如若不requires對應模塊
  • 對應的模塊不exports

總結

以上是生活随笔為你收集整理的Java 模块系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。