- exports
导出包,使得被导出的包可以被new,以及反射访问public类以及public属性 - open
开放包,或者开放模块,使得 可以被深度反射访问(但不能被new等操作)
使用open模块时,如果不require该模块,则需要在javac 命令中加入参数 --add-modules 模块名称,模块名称 - require
加入依赖
requires [transitive] [static] <module>;
transitive :隐式依赖 static:运行时可选依赖
模块创建规则
- 在同一个项目中.如果存在多个模块,那么这些模块中不能包含相同的 包名
- 模块系统没有子模块的概念。 也就是说,com.jdojo.person和com.jdojo.person.client是两个单独的模块; 第二个不是第一个的子模块
模块类型
- 普通模块(Normal modules)
- 开发模块(Open modules)
- 自动模块(Automatic modules)
1 模块名称生成规则
2 默认导出所有,开放模块
3 因为没有办法指定require,因此运行时,需要增加 --add-modules - 未命名模块(Unnamed modules)
1 未命名模块访问 普通模块,同样需要在编译和运行时 --add-modules
2 普通模块访问 未命名模块,需要将编译和运行时 -classpath 未命名模块路径,且仅能使用反射访问,或者用自动模块作为桥梁