Java9新特性中的模块化详解

yizhihongxing

Java9新特性中的模块化详解

什么是模块化程序设计

在Java9之前,所有的Java代码都需要打包到JAR文件中,然后导入其中的类来进行使用。这种方式可能会导致一些问题,比如命名冲突、类文件加载过多等问题,而模块化程序设计是为了解决这些问题而产生的。

Java9中,你可以将类文件和其相关依赖组织成为一个模块,模块可以指定哪些包对外暴露、哪些包只在内部使用等,可以更好的管理代码,避免一些问题的产生。

模块化程序设计的语法

模块定义

在Java9中,使用module-info.java文件定义一个模块,模块文件的语法与Java语法类似,如下:

module com.example.moduleName {
    requires module1;
    requires module2;
    exports package1;
}

这里的moduleName是模块的名称,requires关键字用于指定该模块依赖的其他模块,可以有多个requires关键字,exports关键字用于指定该模块对外暴露(导出)的包名,也可以有多个。

模块依赖

要使用其他模块中的类,需要在模块定义中使用requires指定依赖:

module com.example.moduleName {
    requires module1;
}

导出包

如果想从当前模块中暴露某个包,让其它模块可以访问到,则需要在模块定义中使用exports指定需要导出的包:

module com.example.moduleName {
    exports package1;
}

示例一:创建一个模块,并依赖另外一个模块

创建模块

首先,我们需要新建一个Java工程,然后在根目录下新建一个module-info.java文件,文件内容如下:

module com.example.moduleA {
    requires com.example.moduleB;
}

这里我们创建了一个名为com.example.moduleA的模块,并指定依赖com.example.moduleB模块。

创建依赖的模块

com.example.moduleA模块中我们依赖了com.example.moduleB模块,所以我们需要先创建这个模块。方法同上,在根目录下新建一个module-info.java文件,文件内容如下:

module com.example.moduleB {

}

编写代码

我们在com.example.moduleB中创建一个com.example.moduleB.HelloB类:

package com.example.moduleB;

public class HelloB {
    public void hello() {
        System.out.println("Hello from ModuleB");
    }
}

com.example.moduleA中创建一个com.example.moduleA.HelloA类:

package com.example.moduleA;
import com.example.moduleB.HelloB;

public class HelloA {
    public void hello() {
        System.out.println("Hello from ModuleA");
        new HelloB().hello();
    }
}

编译打包

我们需要先使用Java9以上的版本编译程序,然后将编译后的类文件打包成JAR文件。

运行程序

我们在根目录下新建一个Main.java文件,文件内容如下:

package com.example;

import com.example.moduleA.HelloA;

public class Main {
    public static void main(String[] args) {
        new HelloA().hello();
    }
}

使用Java9以上的版本运行程序:

java --module-path /path/to/your/jar/files -m com.example/com.example.Main

可以看到输出结果:

Hello from ModuleA
Hello from ModuleB

示例二:导出一个包

创建模块

我们使用上一个示例中的工程,不过需要对com.example.moduleA模块作如下修改:

module com.example.moduleA {
    requires com.example.moduleB;
    exports com.example.moduleA;
}

这里我们增加了一个exports关键字,对包com.example.moduleA进行导出。

编写代码

我们在com.example.moduleA模块中创建一个com.example.moduleA.HelloA类:

package com.example.moduleA;

public class HelloA {
    public void hello() {
        System.out.println("Hello from ModuleA");
    }
}

在根目录下新建一个Main.java文件,文件内容如下:

package com.example;

import com.example.moduleA.HelloA;

public class Main {
    public static void main(String[] args) {
        new HelloA().hello();
    }
}

编译打包

同上。

运行程序

同上。

运行结果:

Hello from ModuleA

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java9新特性中的模块化详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java dbcp连接池基本使用方法详解

    首先,让我们来介绍一下什么是Java DBCP连接池。 什么是Java DBCP连接池? Java DBCP(Database Connection Pool)连接池是一种连接管理工具,它通过在内存中维护一定数量的数据库连接,避免了重复连接数据库的开销,提升了应用程序的性能。Java DBCP连接池可以在应用程序和数据库服务之间提供一个中间层,负责管理和分配…

    Java 2023年5月19日
    00
  • 微信小程序实现卡片左右滑动效果的示例代码

    以下是“微信小程序实现卡片左右滑动效果的示例代码”的详细攻略。 1.实现原理 实现卡片左右滑动效果主要基于小程序的swiper组件。swiper组件是一个可以实现轮播图、图片幻灯片等功能的组件,其实现方式是通过横向滑动图片来实现轮播的效果。 为了实现卡片左右滑动效果,我们可以利用swiper组件的以下属性和事件: 属性: current,用于设置当前所在的卡…

    Java 2023年5月23日
    00
  • SpringBoot @ExceptionHandler与@ControllerAdvice异常处理详解

    下面是SpringBoot @ExceptionHandler与@ControllerAdvice异常处理的详解。 异常处理概述 异常是在程序运行过程中可能出现的错误或意外情况,它会导致程序无法正常执行。在Java中,异常处理是必不可少的一部分,能够提高程序的鲁棒性和可靠性。在SpringBoot中,常见的异常类型包括:空指针异常、请求方法不支持异常、请求参…

    Java 2023年5月27日
    00
  • java注解的全面分析

    下面介绍一下 “Java注解的全面分析” 的完整攻略。 1. 什么是Java注解 Java 注解(Annotation)是 Java 语言中的一种类似注释的机制,它可以通过标签(@Tag)的形式将元数据信息与代码进行绑定。Java 注解提供了对程序元素进行元数据描述的能力,它可以用于 Java 代码的分析、编译或者运行时的处理,以及生成 XML 文件等。Ja…

    Java 2023年5月26日
    00
  • 浅析JAVA常用JDBC连接数据库的方法总结

    我们来详细讲解一下“浅析JAVA常用JDBC连接数据库的方法总结”的完整攻略。 简介 在Java应用程序中,我们通常使用JDBC(Java Database Connectivity)来连接各种类型的数据库,包括关系型数据库(如MySQL、Oracle、SqlServer等)和非关系型数据库(如MongoDB、Redis等)。 使用JDBC连接数据库的过程包…

    Java 2023年5月19日
    00
  • Java多线程、进度条实现赛马实验的示例代码

    请看下面的攻略。 Java多线程、进度条实现赛马实验的示例代码攻略 1. 基本概述 本文将着眼于如何使用Java实现一个多线程、进度条等相关功能,并以赛马模拟游戏为例,演示Java实现多线程、界面进度条样例代码的具体过程。 在Java中,提供了多线程编程的支持,可以使用Thread,Runnable等类来实现。 为了在界面上显示进度条,我们需要使用Java …

    Java 2023年5月19日
    00
  • SpringBoot配置和切换Tomcat流程详解

    关于SpringBoot配置和切换Tomcat的流程,我来为您详细讲解。 1. SpringBoot 配置 Tomcat 的默认端口 SpringBoot默认使用的Tomcat端口是8080,可以通过在配置文件中配置server.port来修改端口号,例如设置为8090端口,只需要按照以下步骤操作: 打开配置文件application.properties或…

    Java 2023年6月2日
    00
  • spring整合redisson开启缓存方式

    下面我将为你详细讲解“Spring整合Redisson开启缓存”的操作步骤及示例。 添加依赖 在pom.xml中添加以下依赖: <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-22</artifac…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部