修复 Java 中无法找到或加载主类错误
本文介绍了 Java 中无法找到或加载主类错误。
假设我们已经编写了一段代码并编译了它。到目前为止,一切正常,但是当我们最终运行它时,出现了一个错误。
could not find or load main class
本教程将讨论为什么会发生此错误以及如何解决它。让我们首先回顾一下如何使用命令提示符运行 java 程序。
首先,我们使用 javac 命令编译代码,如下所示:
javac<.java file name>
执行上述命令后,将在当前文件夹中创建一个扩展名为 .class
的文件。
.class
文件将具有与 .java
程序相同的类。然后我们使用以下命令运行 .class
文件来执行 Java 代码:
java<classname>
我们可能会收到 could not find or load main class
错误。此错误是运行时错误,当 Java 虚拟机无法找到我们试图运行的主类(包含 main 方法的类)时发生。
此错误最常发生在使用命令提示符运行我们的 Java 程序时。在讨论这个错误的原因之前,让我们先了解一下 CLASSPATH。
Java 中的类路径
这是 executable.class
和其他资源文件。
JVM 使用它来定位文件。除非我们在系统变量中明确设置 CLASSPATH,否则默认的 CLASSPATH 是当前目录。
要运行程序,我们需要传递类名。我们以下面的例子来说明这一点:
public class DelftStack {
public static void main(String args[]) {
System.out.println("Hello from DelftStack");
}
}
让我们首先使用 javac 命令编译它:
C :\Users\User\Documents\DelftStack\java
> javac DelftStack.java C :\Users\USer\Documents\DelftStack\java
>
执行上述命令后,在当前目录中创建了一个 DelftStack.class
文件。让我们使用 java 命令运行该文件。
C :\Users\User\Documents\DelftStack\java
> java DelftStack.class Error : Could not find or load main class DelftStack.
class Caused by : java.lang.ClassNotFoundException : DelftStack.class
在这里,我们得到一个错误,因为我们正在尝试运行 .class
文件。相反,我们只需要传递类名。
往下看:
C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack
在 Java 中由于传递了错误的名称而无法找到错误
当我们传递错误的类名时,也可能出现找不到或加载主类
。继续前面的示例,如果我们尝试使用错误的名称运行程序,如下所示:
C :\Users\User\Documents\DelftStack\java > java DelftStac Error
: Could not find or load main class DelftStac Caused by : java.lang.ClassNotFoundException
: DelftStac
我们收到上面的错误是因为我们拼错了类名。在这里,JVM 试图运行一个名为 DelftStac
的类,但它并不存在。
我们可以通过正确拼写类名来解决这个问题,如下所示:
C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack
我们还应该注意,类名是区分大小写的。如果我们运行类 Delftstack
,我们会得到一个错误。
往下看:
C :\Users\User\Documents\DelftStack\java > java Delftstack Error
: Could not find or load main class Delftstack Caused by : java.lang.NoClassDefFoundError
: Delftstack(wrong name
: Delftstack)
我们应该使用正确的拼写和正确的大小写来成功运行文件。
由于 Java 中的包名称错误,无法找到错误
让我们将 DelftStack
类移动到 com.DelftStack
包中。包用于将相似的类保持在一起。
看下面的代码:
package com.DelftStack;
public class DelftStack {
public static void main(String args[]) {
System.out.println("Hello from DelftStack");
}
}
要在 Java 中编译包,我们使用以下命令:
javac - d.<.java file name>
-d
标志开关用于告诉将生成的类文件保存在哪里。这 。
表示当前目录。
我们将上面的代码编译如下:
C :\Users\User\Documents\DelftStack\java > javac - d.DelftStack.java
执行上述命令后,在我们的当前目录中创建了以下文件夹结构。
com\DelftStack\DelftStack.class
正如我们所看到的,我们的类文件是我们当前目录深处的两个文件夹。因此,如果我们尝试像以前那样运行我们的类文件,我们会得到一个错误。
C :\Users\User\Documents\DelftStack\java > java DelftStack Error
: Could not find or load main class DelftStack Caused by : java.lang.ClassNotFoundException
: DelftStack
此错误的原因是当前文件夹中不存在 DelftStack
类。要运行包中存在的类,我们需要传递其完全限定名称(在本例中为 com.DelftStack.DelftStack
)。
C :\Users\User\Documents\DelftStack\java > java com.DelftStack.DelftStack Hello from DelftStack
这告诉 Java 在 com\DelftStack
文件夹中查找类。
由于 Java 中的 CLASSPATH 错误,无法找到错误
CLASSPATH 告诉 JVM .class
文件在哪里。
假设我们当前在不同的文件夹中,并且我们想要运行一个 Java 程序,其类文件存在于不同的文件夹中。在这种情况下,我们可以使用 -classpath
选项传递类文件的位置。
例如:
java - classpath XYZ / ABC < class name
>
上面的命令告诉 Java 在 ZYX/ABC
文件夹中查找 .class
文件。
在前面的例子中,我们创建了一个包。
假设我们要运行 com/DelftStack
文件夹中的文件。使用以下命令,我们可以这样做:
> java - classpath../../ com.DelftStack.DelftStack Hello from DelftStack
../
表示父目录。所以 ../../
意味着查找两个目录级别。
让我们再举一个例子,假设我们在桌面(文件夹)位置,我们想在计算机的其他地方运行一个类文件。我们可以通过以下方式做到这一点。
> java - cp C :\Users\User\Documents\DelftStack\java com.DelftStack.DelftStack Hello from DelftStack
-cp
标志是 -classpath
的简写。在这里,我们传递了存在 .class
文件的文件夹的完整位置。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中执行 SQL 查询
发布时间:2024/04/24 浏览次数:1195 分类:Python
-
本教程演示了在 Python 中对 Pandas DataFrame 执行 SQL 查询。
在 Pandas 中使用 stack() 和 unstack() 函数重塑 DataFrame
发布时间:2024/04/24 浏览次数:1289 分类:Python
-
本文讨论了 Pandas 中 stack() 和 unstack() 函数的使用。