模塊的基本使用 模塊使用步驟 創建模塊(創建模塊,創建包,創建類,定義方法) -創建兩個模塊myOne,myTwo 在模塊的src目錄下創建module-info.java的描述性文件,該文件專門定義模塊名,訪問許可權,模塊依賴等信息 -描述性文件中使用模塊導出和模塊依賴來進行配置並使用 模塊中所有未 ...
模塊的基本使用
模塊使用步驟
- 創建模塊(創建模塊,創建包,創建類,定義方法)
-創建兩個模塊myOne,myTwo- 在模塊的src目錄下創建module-info.java的描述性文件,該文件專門定義模塊名,訪問許可權,模塊依賴等信息
-描述性文件中使用模塊導出和模塊依賴來進行配置並使用- 模塊中所有未導出的包都是模塊私有的,是不能在模塊之外被訪問的
-在myOne這個模塊下的描述性文件中配置模塊導出
-模塊導出格式:exports 包名;- 一個模塊要訪問其他的模塊,必須明確指定依賴哪些模塊,未指明依賴的模塊不能訪問
-在myTwo模塊下的描述性文件中配置依賴關係
-模塊依賴格式:require 模塊名;
-註意:模塊名報錯,需要按下Alt+Enter提示,然後選擇模塊依賴- 在myTwo這個模塊的類中使用依賴模塊下的內容
//老師類
public class Teacher {
public void teach(){
System.out.println("老師教書");
}
}
//學生類
public class Student {
public void study(){
System.out.println("學生學習");
}
}
//模塊導出配置
module myOne {
//導出了com.chawaner_01,但沒有導出com.chawaner_02
exports com.chawaner_01;
}
//模塊依賴配置
module myTwo {
requires myOne;
}
測試1:
//測試類:在模塊myTwo中使用模塊myOne中的內容
public class Test01 {
public static void main(String[] args) {
Teacher te = new Teacher();
te.teach();
}
}
運行結果:因為導出了myOne模塊下的com.chawaner_01,所以Teacher可以使用,運行無誤
老師教書
測試2:因為沒有導出myOne模塊下的com.chawaner_02,所以Student不能使用
模塊化概述
Java9推出了模塊化系統,讓Java實現了輕量化。
模塊服務的使用
在myOne模塊下定義一個介面MyService
//定義介面
public interface MyService {
void service();
}
定義兩個類Chawaner 和 Dounaifen,分別實現 Myservice 介面,重寫 service() 方法
public class Chawaner implements MyService {
@Override
public void service() {
System.out.println("茶碗兒");
}
}
public class Dounaifen implements MyService {
@Override
public void service() {
System.out.println("豆奶粉");
}
}
在模塊 myOne 中導出 com.chawaner_03 ,並指定 MyService 的實現類為 Chawaner
module myOne {
exports com.chawaner_01;
exports com.chawaner_03;
//服務提供:指定MyService的實現類為Chawaner
//只需要提供具體的實現類
provides MyService with Chawaner;
}
在 myTwo 這個模塊下的描述性文件中添加配置,聲明服務介面為MyService
module myTwo {
requires myOne;
//使用介面
//面向介面編程,只需要載入介面
uses MyService;
}
在myTwo這個模塊的類中使用MyService介面提供的服務。
ServiceLoader:一種載入服務實現的工具
public class Test01 {
public static void main(String[] args) {
//ServiceLoader.load(介面.class):載入服務
//面向介面編程,只需要載入介面
ServiceLoader<MyService> myServices = ServiceLoader.load(MyService.class);
//遍歷服務,拿到介面
for (MyService myService : myServices) {
//介面調用方法
//實際上是指定的介面的實現類,調用重寫的service()方法
myService.service();
}
}
}
運行結果:
茶碗兒