java9-模块化介绍

java9的模块化类似于nodejs,如果大家学过,可能更好理解模块化的概念。Oracle为什么要给java加入模块化,主要有以下几个问题:

  • 整个jre环境太大了,运行一个hello world也需要整个几百兆的jre环境
  • public是对任何东西都开放的,也可以访问内部的api,并且可以通过反射获取任何信息
  • 可以细粒度的控制依赖关系,比jar更好的依赖管理

jdk的目录也变了,现在是这样的
java9-模块化介绍

模块可以理解为是代码和数据的封装体,有一个配置的文件module-info.java,在里面声明需要引入哪些模块,此模块需要对外提供什么。我们看一下java.compiler的module-info
java9-模块化介绍
exports就是把自己这个模块的下面的类给公开,其他引入这个模块的在module中用requires 就能引入,然后就可以用这个包下的类了。如果某个包没有被exports,就算是通过反射,也获取不到里面的类,public的可访问性收到了模块的限制。