Java 使用JDK 14在CMD中运行初学者程序的问题

Java 使用JDK 14在CMD中运行初学者程序的问题,java,Java,我目前正在使用Herbert Schildt的“Java初学者指南第八版”学习使用Java编程。我以前没有编程经验,现在遇到了一个错误 我已将JDK14安装到我的C驱动器上。经过很长时间的编译器问题,我无法找到文件,我相信我已经解决了这个问题。但现在我遇到了以下情况: java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_251-b08) Java HotSpot(TM) Client VM

我目前正在使用Herbert Schildt的“Java初学者指南第八版”学习使用Java编程。我以前没有编程经验,现在遇到了一个错误

我已将JDK14安装到我的C驱动器上。经过很长时间的编译器问题,我无法找到文件,我相信我已经解决了这个问题。但现在我遇到了以下情况:

java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) Client VM (build 25.251-b08, mixed mode)

C:\Users\*****>javac -version
javac 14.0.1

C:\Users\*****\mywork> java example
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: example has been compiled by a more recent version of the Java Runtime (class file version 58.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

C:\Users\*****\mywork>

检查环境变量
PATH
是否引用了
Java
bin目录。它的配置可能有点奇怪,它涉及到
Jdk8
jdk14
。。但我不确定那里发生了什么。出于某种奇怪的原因,您的
javac
运行的是
Jdk14
二进制文件,而
java
运行的是
Jdk8
二进制文件

然后我会在
cmd
中检查
where java
,这样,我会看到我的
java.exe
文件的位置

然后,您可能希望更正Java安装,并查看您的计算机上是否安装了多个二进制文件(jdk14和jdk8),或者您希望删除其中一个,或者—如果您希望保留这两个—确保环境变量设置正确

最后,您可能会发现检查
echo%JAVA\u HOME%
(适用于寡妇)或echo$JAVA\u HOME(适用于Linux)也很有用,以便查看您的
JAVA\u HOME
所指的位置

注意,您的问题也可以归因于您的IDE。例如,如果您有一个使用内置Jdk的
IntelliJ
,可能需要重新配置它


这个问题之所以存在,是因为您正在使用较新版本(14)的Java编译文件,并且正在使用较低版本(8)的Java运行这些文件。

检查您的环境变量
PATH
是否引用了
Java
bin目录。它的配置可能有点奇怪,它涉及到
Jdk8
jdk14
。。但我不确定那里发生了什么。出于某种奇怪的原因,您的
javac
运行的是
Jdk14
二进制文件,而
java
运行的是
Jdk8
二进制文件

然后我会在
cmd
中检查
where java
,这样,我会看到我的
java.exe
文件的位置

然后,您可能希望更正Java安装,并查看您的计算机上是否安装了多个二进制文件(jdk14和jdk8),或者您希望删除其中一个,或者—如果您希望保留这两个—确保环境变量设置正确

最后,您可能会发现检查
echo%JAVA\u HOME%
(适用于寡妇)或echo$JAVA\u HOME(适用于Linux)也很有用,以便查看您的
JAVA\u HOME
所指的位置

注意,您的问题也可以归因于您的IDE。例如,如果您有一个使用内置Jdk的
IntelliJ
,可能需要重新配置它


这个问题之所以存在,是因为您使用的是更高版本(14)的Java来编译文件,而您使用的是更低版本(8)的Java来运行这些文件。

首先,从系统中卸载Java-8。然后,按如下方式编译并运行程序:

javac example.java
java example
java example.java
但是,从Java-11开始,如果
example.Java
文件具有顶级
类example
main
,您甚至不需要使用
javac
编译它,也就是说,您可以按如下方式直接运行它:

javac example.java
java example
java example.java

在旁注中,您应该遵循类,例如,
example
应命名为
example

首先,从系统中卸载Java-8。然后,按如下方式编译并运行程序:

javac example.java
java example
java example.java
但是,从Java-11开始,如果
example.Java
文件具有顶级
类example
main
,您甚至不需要使用
javac
编译它,也就是说,您可以按如下方式直接运行它:

javac example.java
java example
java example.java

在旁注中,您应该遵循,例如,类,
example
应命名为
example

JRE从Java 11开始被删除。你的书有点过时了。卸载已安装的Java 8 JRE。或者降级到Java8JDK,现在只关注学习Java8。您的系统上安装了不同版本的jre和JDK@托波纳。卸载你的jre。检查指向jre的路径。您使用不同版本的java编译器编译程序,并尝试使用不同版本的jre运行程序。从您的路径中删除该jre路径您也可以尝试这样做:它非常容易设置,并且允许在java版本之间快速切换(将来无论如何您都必须这样做);以及PascalCase中的类名。@McEmperon,这与此问题无关。JRE从Java 11开始被删除。你的书有点过时了。卸载已安装的Java 8 JRE。或者降级到Java8JDK,现在只关注学习Java8。您的系统上安装了不同版本的jre和JDK@托波纳。卸载你的jre。检查指向jre的路径。您使用不同版本的java编译器编译程序,并尝试使用不同版本的jre运行程序。从您的路径中删除该jre路径您也可以尝试这样做:它非常容易设置,并且允许在java版本之间快速切换(将来无论如何您都必须这样做);和PascalCase中的类名。@mcepender,这与此问题无关<代码>C:\Users\*****\mywork>java示例错误:无法找到或加载主类示例,原因是:java.lang.NoClassDefFoundError:example(错误名称:examp