首页 > 解决方案 > 当我尝试在终端中运行我的 java 程序时,是否需要编写注释 (.java)?

问题描述

通常,我们使用关键字编译一个java程序javac,然后使用关键字运行它java。但在我的情况下,如果我只输入java Main.java,它运行没有任何问题。

但是,如果我尝试以传统方式运行程序:

  1. javac Main.java
  2. java Main

它返回一个错误:

Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError

这应该发生吗?我学会了传统的方法。

我已将IntelliJ设置为打开.class.main文件的默认应用程序。

标签: java

解决方案


编译代码后,您最终会得到 .class 文件。这些二进制文件是 Java 解释以执行您的程序的字节码。

NoClassDefFoundError 表示负责动态加载类的类加载器找不到您尝试使用的类的 .class 文件。

为了解决这个错误,你必须知道 Java 是如何查找和加载类的,你只需要记住有一个名为 CLASSPATH 的环境变量,其中包括 Java 查找所有类文件的目录,如果它没有找到你的主类然后它会抛出“错误:无法找到或加载主类 XXX”,其中 XXX 是您的主类的名称。

例如,如果你有一个类 com.example.,编译后你会有一个类文件 sensor.class。例如,您的工作目录是 .../project/。该类文件必须放在 .../project/com/example 中,您可以将类路径设置为 .../project/

例子:-

C:\project\practice\Main.class在我的电脑上。

C:\project\practice\它会运行吗?不,它不会运行它会给你:

线程“main”中的异常 java.lang.NoClassDefFoundError: Test 由于类的名称不是 Main,而是 practice.Main,即使您的类路径设置为当前目录。

现在,如果我从 C:\project\practice\ 发出命令 java practice.Main 会发生什么,它将再次无法运行并给出错误?

线程“main”中的异常 java.lang.NoClassDefFoundError: practice/Main

为什么,因为现在它正在寻找一个名为 Main 的类,它正在包实践中,从当前目录“。”开始。但找不到它,因为在此路径“C:\project\practice”之后没有名为“practice”的目录。

要成功运行它,您需要返回目录 C:\project 现在运行 C:\project>java practice.Main 它将成功运行


推荐阅读