首页IT科技java模块化设计(Java-模块化)

java模块化设计(Java-模块化)

时间2025-04-29 23:39:29分类IT科技浏览3854
导读:模块的基本使用 模块使用步骤...

模块的基本使用

模块使用步骤

创建模块(创建模块        ,创建包                 ,创建类      ,定义方法)

-创建两个模块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(); } } }

运行结果:

茶碗儿

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
elcard(el-card多个卡片布局) zblog使用php缓存插件(用zblog一键搭建你的专属个人博客)