我尝试创建一个演示来说明模块封装。 我在不同的模块中有 2 个类 a.A 和 b.B。 模块a需要b,b导出到a
package a;
import b.B;
class A{
public static void main(String[] args){
B b = new B();
}
}
package b;
public class B{
public B(){
System.out.println("B created");
}
}
module a {
requires b;
}
module b {
exports b to a;
}
├───class
├───jar
└───src
├───a
│ └───module-info.java
│ └───a
│ └───A.java
├───b
│ └───module-info.java
│ └───b
│ └───B.java
有效
>javac -d class --module-source-path src -m a
>jar -c -f jar/a.jar -e a.A -C class/a .
>jar -c -f jar/b.jar -C class/b .
>java -p jar -m a
B created
但是,为什么我能够从默认包中的其他类访问 b.B
import b.B;
class C{
public static void main(String[] a){
B b = new B();
}
}
>javac -cp ".;jar/b.jar" C.java
>java -cp ".;jar/b.jar" C
B created
openjdk版本“17.0.1”2021-10-19