迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

修复 Java 中无法找到或加载主类错误

作者:迹忆客 最近更新:2023/11/13 浏览次数:

本文介绍了 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 文件的文件夹的完整位置。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Java 中的 volatile 关键字

发布时间:2023/11/13 浏览次数:173 分类:Java

本文讨论了 Java 中的 volatile 关键字及其优缺点,并举例说明了如何使用。Java 是一种非常流行的编程语言,通过了解 Java,我们可以很容易地理解它为什么会在编程社区中获得这样的地位。

Java 中的 StringUtils

发布时间:2023/11/13 浏览次数:80 分类:Java

本文介绍 Java 中的 StringUtils 类是什么。本文介绍什么是 StringUtils 以及如何在 Java 中使用它来处理字符串。StringUtils 是一个用于处理 String 的类,它提供了比 Java String 类更多的实用方法。

Java 中的 flatMap

发布时间:2023/11/13 浏览次数:132 分类:Java

本文介绍 flatMap 以及如何在 Java 中使用它。本文介绍 flatMap 以及如何在 Java 中使用它。flatMap 是 Java 流中的一个操作/函数,用于在执行某些功能性任务后获取新流。在这里,我们将讨论 flatMap

在 Java 中将 Stream 元素转换为映射

发布时间:2023/11/13 浏览次数:77 分类:Java

我们将使用 Java 将流元素转换为映射。我们将向你展示如何使用 Collectors.toMap() 从 Java 字符串中提取映射。我们将讨论 Java Streams 的实际用途以及如何将流元素转换为映射元素。

Java 中的 findFirst 流方法

发布时间:2023/11/13 浏览次数:171 分类:Java

本教程介绍 Java 中的 findFirst 流方法。java.util.stream API 是在 Java 8 中引入的;它用于处理对象的集合。不同的源(例如数组或集合)可以创建流。

Java 中的 Stream 的 reduce 操作

发布时间:2023/11/13 浏览次数:147 分类:Java

本文介绍 Java 中 stream 的 reduce 操作。本文将讨论 reduce() 操作细节并讨论它的一些示例。在讨论 reduce() 操作之前。让我们首先讨论减少。

Java 中的 reflection 是什么

发布时间:2023/11/13 浏览次数:79 分类:Java

本文介绍了 reflection 以及如何在 Java 中使用它。本文介绍 reflection 以及如何在 Java 中使用它。Java 有一个 reflection API 特性,它允许我们检查和修改类、接口等。

修复 Java 未解决的编译错误

发布时间:2023/11/13 浏览次数:141 分类:Java

本文介绍如何修复 Java 中未解决的编译错误。Java 在三个组件上工作:JVM、JRE 和 JDK。JVM(Java 虚拟机)在物理上并不存在,它提供了运行字节码的环境。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便