个人对Java9的模块化的理解
个人对Java9模块化的简单理解是:模块是 package 的容器,是 package 的上一层。在模块里,可以输出(管理)当前模块哪些包是对外暴露(exports)的。同样的,当前模块需要别的模块,就要引用(requires)进来。
Java9模块化的例子
使用Idea创建一个项目 java-9-module-demo,添加两个模块:
- module-main:主模块
- module-user:用户模块
这个例子将演示模块化的作用和写法,实现了以下功能:
- 主模块需要用户模块中的
User
类。 - 用户模块暴露(输出)了
User
类所在的包,因此主模块可以使用(可以成功 requires)。 - 主模块无法访问用户模块中的
HiddenClass
类,因为用户模块没有输出(exports)这个类所在的包。
项目结构如下图所示:
主类
package main;
import user.User;
/**
* 主类
*
* @author Zebe
*/
public class Main {
/**
* 运行入口
*
* @param args 运行参数
*/
public static void main(String[] args) {
// 调用 module-user 模块中的 User 类
User user = new User();
user.sayHello();
}
}
用户类
package user;
/**
* 用户类
*
* @author Zebe
*/
public class User {
/**
* 打招呼
*/
public void sayHello() {
System.out.println("hello, 我是 module-user 模块 user 包里面的 User 类!");
}
}
隐藏类
package invisible;
/**
* 隐藏类
*
* @author Zebe
*/
public class HiddenClass {
public void test() {
System.out.println("Test");
}
}
主模块信息定义
/**
* module-main 主模块信息定义
* @author Zebe
*/
module module.main {
// 需要 module-user 模块
requires module.user;
}
用户模块信息定义
/**
* module-user 用户模块信息定义
* @author Zebe
*/
module module.user {
// 输出(对外暴露)整个 user 包
exports user;
//exports invisible;
}
小结
眼过千遍,不如手过一遍。对于编程的学习,在于积累和不断的练习。
本文首发于个人独立博客,文章链接:http://www.zebe.me/java-9-module-demo