Java9 module特性 初识

本文介绍了Java9的模块特性,包括requires public、requires static、exports、opens、uses和provides to的用法,以及模块的兼容性和迁移策略。通过示例解释了模块间的依赖关系,反射访问权限和ServiceLoader加载服务的机制,最后总结了模块系统如何处理Classpath和Modulepath中的内容。
摘要由CSDN通过智能技术生成

参考网站:The State of the Module SystemJava9模块系统的说明(翻译)Java9 中的 Module, ModulePath 和 ClassPathJava 9 揭秘(4. 模块依赖)

  • 每个java project中的根目录下都有一个module-info.java
  • 模块名不可重复,因此建议采用类似包名的结构。
  • <>中的名字需要是全限定名,不管是包名、类名或是接口名。
    此外,在exports<package name>中,java.langjava.lang.annotation是不同的包,需要分开写,只写java.lang则只能公开该包下的类,而不会公开java.lang.annotation下的类。

使用示例(以及Maven整合java9):https://www.jianshu.com/p/66c26dd3237f


requires public

module <module name> {
	requires <module>;
	requires public <module>;
	exports <module>;
}
  • A模块下可包括packagea、packageb、packagec包,如果要向其他模块公开packagea包,则需要用exports packagea
  • B模块如果要使用A模块,则需要使用requires A(同时还需要将该组件加入到项目->buildpath->Modulepath)
  • 接上,C模块即使引用了B模块requires B,也无法使用A模块中的内容。如果希望让C模块可以通过引用模块B,从而间接引用A模块,则需要在B模块中声明requires public A,这称为隐式可读性(implied readability)。

requires static

module <module name> 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值