Java9新特性中的模块化详解
什么是模块化程序设计
在Java9之前,所有的Java代码都需要打包到JAR文件中,然后导入其中的类来进行使用。这种方式可能会导致一些问题,比如命名冲突、类文件加载过多等问题,而模块化程序设计是为了解决这些问题而产生的。
Java9中,你可以将类文件和其相关依赖组织成为一个模块,模块可以指定哪些包对外暴露、哪些包只在内部使用等,可以更好的管理代码,避免一些问题的产生。
模块化程序设计的语法
模块定义
在Java9中,使用module-info.java
文件定义一个模块,模块文件的语法与Java语法类似,如下:
module com.example.moduleName {
requires module1;
requires module2;
exports package1;
}
这里的moduleName
是模块的名称,requires
关键字用于指定该模块依赖的其他模块,可以有多个requires
关键字,exports
关键字用于指定该模块对外暴露(导出)的包名,也可以有多个。
模块依赖
要使用其他模块中的类,需要在模块定义中使用requires
指定依赖:
module com.example.moduleName {
requires module1;
}
导出包
如果想从当前模块中暴露某个包,让其它模块可以访问到,则需要在模块定义中使用exports
指定需要导出的包:
module com.example.moduleName {
exports package1;
}
示例一:创建一个模块,并依赖另外一个模块
创建模块
首先,我们需要新建一个Java工程,然后在根目录下新建一个module-info.java
文件,文件内容如下:
module com.example.moduleA {
requires com.example.moduleB;
}
这里我们创建了一个名为com.example.moduleA
的模块,并指定依赖com.example.moduleB
模块。
创建依赖的模块
在com.example.moduleA
模块中我们依赖了com.example.moduleB
模块,所以我们需要先创建这个模块。方法同上,在根目录下新建一个module-info.java
文件,文件内容如下:
module com.example.moduleB {
}
编写代码
我们在com.example.moduleB
中创建一个com.example.moduleB.HelloB
类:
package com.example.moduleB;
public class HelloB {
public void hello() {
System.out.println("Hello from ModuleB");
}
}
在com.example.moduleA
中创建一个com.example.moduleA.HelloA
类:
package com.example.moduleA;
import com.example.moduleB.HelloB;
public class HelloA {
public void hello() {
System.out.println("Hello from ModuleA");
new HelloB().hello();
}
}
编译打包
我们需要先使用Java9以上的版本编译程序,然后将编译后的类文件打包成JAR文件。
运行程序
我们在根目录下新建一个Main.java
文件,文件内容如下:
package com.example;
import com.example.moduleA.HelloA;
public class Main {
public static void main(String[] args) {
new HelloA().hello();
}
}
使用Java9以上的版本运行程序:
java --module-path /path/to/your/jar/files -m com.example/com.example.Main
可以看到输出结果:
Hello from ModuleA
Hello from ModuleB
示例二:导出一个包
创建模块
我们使用上一个示例中的工程,不过需要对com.example.moduleA
模块作如下修改:
module com.example.moduleA {
requires com.example.moduleB;
exports com.example.moduleA;
}
这里我们增加了一个exports
关键字,对包com.example.moduleA
进行导出。
编写代码
我们在com.example.moduleA
模块中创建一个com.example.moduleA.HelloA
类:
package com.example.moduleA;
public class HelloA {
public void hello() {
System.out.println("Hello from ModuleA");
}
}
在根目录下新建一个Main.java
文件,文件内容如下:
package com.example;
import com.example.moduleA.HelloA;
public class Main {
public static void main(String[] args) {
new HelloA().hello();
}
}
编译打包
同上。
运行程序
同上。
运行结果:
Hello from ModuleA
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java9新特性中的模块化详解 - Python技术站