gpt4 book ai didi

java - 为什么Java 8可以加载Java 9类?

转载 作者:行者123 更新时间:2023-12-02 10:27:00 24 4
gpt4 key购买 nike

我有以下设置:

A 类 - 使用 java 9 编译(类版本 53)
B 类 - 应使用 java 8 进行编译(类版本 52)

B 类依赖于 A 类。

现在我得到了一个令人惊讶的结果:我可以使用 Java 8 成功编译类 B,尽管它依赖于 java 9 编译的类 A。

如果我使用 Java 10 或 Java 11 编译类 A,然后尝试使用 Java 8 编译类 B,我会收到预期的错误消息:

类文件版本错误55.0(或54.0),应该是52.0

谁能解释一下为什么我没有收到消息

类文件版本错误53.0,应该是52.0

如果我尝试将 Java 8 与 Java 9 类一起使用?

我使用这个java版本:

Java 8:Oracle jdk 1.8.0_144(安装在文件夹 d:\jdk8 中)
Java 9:Oracle jdk 9.0.1(安装在文件夹 d:\jdk9 中)
Java 11:Oracle jdk 11.0.1(安装在文件夹 d:\jdk11 中)

为了演示它,我创建了这两个类文件:

文件A.java:

public class A {
public void test() {
System.out.println("Class A");
}
}

文件B.java:

public class B {
public static void main(String[] args) {
A classA = new A();
classA.test();

System.out.println("Class B");
}
}

首先 A.java 是用 Java 9 编译的:
d:\jdk9\bin>javac d:\test\A.java

然后使用 Java 9 编译的类 A 使用 Java 8 编译 B.java:
d:\jdk8\bin>javac -cp d:\test d:\test\B.java

警告:d:\test\A.class:主要版本 53 比该编译器支持的最高主要版本 52 更新。
建议升级编译器。
1 条警告

因此类文件已成功编译,但有警告。我刚刚通过手动调用编译器看到了这个警告。如果我使用 Maven 构建项目,此警告不可见。

现在 A 类是用 Java 11 编译的(与 Java 10 相同):
d:\jdk11\bin>javac d:\test\A.java

如果我尝试编译 B 类,则会收到错误:

d:\jdk8\bin>javac -cp d:\test d:\test\B.java

d:\test\B.java:3: 错误:无法访问 A
A classA = new A();
^
错误的类文件:d:\test\A.class
类文件版本错误 55.0,应该是 52.0
请删除或确保它出现在类路径的正确子目录中。
1 个错误

所以从技术上来说似乎可以将 Java 9 编译的类文件与 Java 8 一起使用。但我认为这是不可能的。

最佳答案

java 9 编译器 javac可能是为 java 8 编译的;可以使用较新的编译器来编译较旧的 .class 版本。查找-目标-源 1.8。

IDE 或 maven/gradle 已配置为旧版本。

关于java - 为什么Java 8可以加载Java 9类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53881551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com