JAVA - 模块

模块的概念

在面向对象编程中,基础的构建要素就是类。类提供了封装,私有特性只能被具有明确访问权限的代码访问,即,只能被其所属类中的方法访问,这使得对访问情况的推断称为可能。如果某个私有变量发生了变化,那么我们就会发现一系列可能出错的方法。如果需要修改私有表示,那么就知道哪些方法会受到影响。

在java 中,包提供了更高一级的组织方式,包是类的集合。包也提供了一种封装级别,具有包访问权限的所有特性(无论是共有的还是私有的)都只能被同一个包中的方法访问。

但是在大型系统中,这种级别的访问控制仍显不足。所有共有特性(即在包的外部也可以访问的特性)可以从任何地方访问。假设我们想要修改或剔除一个很少使用的特性,如果它是共有的,那么就没有办法推断这个变化所产生的影响。

Java 平台的设计者们在面对一个规模超大且盘根错节的代码时,认为他们需要一种能够提供更多控制能力的构建机制。他们研究了现有模块系统(OSGi),发现它们都不使用于他们的问题。于是,设计了一个新的系统,称为Java 平台模块系统。现在成了Java 语言和虚拟机的一部分。这个系统已经成功地用于Java API 模块化

一个Java 平台模块包含:

  • 一个包集合
  • 可选地包含资源文件和像本地库这样的其他文件
  • 一个有关模块中可访问的包的列表
  • 一个有关这个模块依赖的所有其他模块的列表

对模块命名

模块是包的集合。模块中的包名无须彼此相关。例如,java.sql 模块中就包含了java.sql、javax.sql、javax.transaction.xa 这几个包。并且,模块和包名相同是完全可行的。

就像路径名一样,模块名是由字母、数字、下划线和句点构成的,而且,和路径名一样,模块之间没有任务层次关系。如果有一个模块是com.horstmann,另一个模块是com.horstmann.corejava ,那么就模块系统而言,他们是无关的。

模块化的 "Hello,World" 程序

module-info.java:

module v2ch09.hellomod{

}

HelloWorld.java:

package com.horstmann.hello;

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello, Modular World");
    }
}

//编译
PS E:\javaProject> javac v2ch09.hellomod/module-info.java v2ch09.hellomod/com/horstmann/hello/HelloWorld.java
v2ch09.hellomod\module-info.java:1: 警告: [module] 模块名称组成部分 v2ch09 应避免以数字结尾
module v2ch09.hellomod{
       ^
1 个警告

//执行
PS E:\javaProject> java --module-path v2ch09.hellomod -m v2ch09.hellomod/com.horstmann.hello.HelloWorld
Hello, Modular World
PS E:\javaProject>

https://zhuanlan.zhihu.com/p/388252107
https://www.cnblogs.com/burn-red/p/17519580.html

posted @ 2024-04-14 21:31  chuangzhou  阅读(3)  评论(0编辑  收藏  举报