my *_*YAN 5 java java-9 java-module
我使用 Java-8 编译器编译了以下代码:
package pack;
import sun.util.calendar.CalendarUtils;
public class A {
public static void main(String[] args) {
System.out.println(CalendarUtils.isGregorianLeapYear(2018));
}
}
Run Code Online (Sandbox Code Playgroud)
我使用 Java-8 编译器将上述代码编译为:
gyan@gyan-pc:~/codes/java$ ~/Documents/softwares/Linux/jdk1.8.0_131/bin/javac -d . a.java
a.java:2: warning: CalendarUtils is internal proprietary API and may be removed in a future release
import sun.util.calendar.CalendarUtils;
^
a.java:9: warning: CalendarUtils is internal proprietary API and may be removed in a future release
System.out.println(CalendarUtils.isGregorianLeapYear(2018));
^
2 warnings
Run Code Online (Sandbox Code Playgroud)
我的默认 Java 解释器的版本:
gyan@gyan-pc:~/codes/java$ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我可以使用 Java-9 解释器运行编译后的代码而不会出现任何错误。
gyan@gyan-pc:~/codes/java$ java pack.a
false
Run Code Online (Sandbox Code Playgroud)
据我所知:在运行时,包“pack”将包含在一个名为“Unnamed module”的特殊模块中。“未命名模块”需要 Java 平台模块中的所有模块。但只有该包才能被相应模块导出的“未命名模块”使用。
我的问题是: 这里的模块 java.base 没有导出包“sun.util.calendar”。那么“未命名模块”是如何使用的呢?
正如Alan所指出的,Relaxed strong encapsulation部分在这方面说明了以下内容:-
--illegal-access=permit打开运行时图像中每个代码模块中的每个包中的所有未命名的模块,即,类路径上的代码,如果该包在JDK 8.存在这使得静态访问,即,由编译的字节代码,和深反射访问,通过平台的各种反射 API。对任何此类包的第一次反射访问操作会导致发出警告,但在那之后不会发出任何警告。此单个警告描述了如何启用更多警告。无法抑制此警告。
此模式是JDK 9 中的默认模式。它将在未来的版本中逐步淘汰,并最终被删除。
此外,如果您尝试执行编译后的代码
.../jdk-9.0.1.jdk/Contents/Home/bin/java --illegal-access=deny pack.Some
Run Code Online (Sandbox Code Playgroud)
使用未来的默认标志,您将无法使用以下跟踪按预期执行代码:
Run Code Online (Sandbox Code Playgroud)Exception in thread "main" java.lang.IllegalAccessError: class pack.Some (in unnamed module @0x1055e4af) cannot access class sun.util.calendar.CalendarUtils (in module java.base) because module java.base does not export sun.util.calendar to unnamed module @0x1055e4af at pack.Some.main(Some.java:7)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |