找不到或无法加载主类什么意思?

今天我们将探讨java的一个常见问题,即如何修复java中的“ error:couldnotfind or load main class ”错误。顾名思义,当java找不到您要执行的类时,就会发生这个错误。为了更好地理解错误,您应该熟悉类路径 CLASSPATH 。如果你不熟悉类路径,那么请检查一下什么是类路径以及它与路径的区别。

另请阅读: PATH和CLASSPATH之间的区别

如果java查找所有类文件的CLASSPATH环境变量未找到类,则会出现“找不到或无法加载主类:XXX”,其中类名为XXX。

如何修复错误:找不到或无法加载主类

1. 从java命令调用.class文件

public class HelloWorld {

    public static void main(String args[]) {
        System.out.println(" You have just run HelloWorld !");       
    }
}

假设我有一个简单的 HelloWorld Java程序。如果我用命令编译它

javac HelloWorld.java

那么 HelloWorld.class 类文件已创建。

如果尝试使用java命令运行.class文件,则会出现以下错误: 找不到或无法加载主类 ,如下所示:

java HelloWorld.class

你应该试试:

java HelloWorld

耶!!你的问题解决了。

You have just run HelloWorld !

2. 如果你的casing不正确

编译代码后,运行以下命令

java helloworld

然后出现“找不到或加载主类helloworld”错误。确保套管正确。在我们的程序中,它应该是 HelloWorld (其中hello的’ H ‘和world的’ W ‘是 大写 的)。

java HelloWorld

耶!它可以很好的打印出来

You have just run HelloWorld !

3. 在包中初始化

在下面的示例中,有个HelloWorld类在 com.javahunger 包。

package com.javahungry;
/**
 * Java program to demonstrate 
 * Error :Could not find or load main class
 * 
 * @author Subham Mittal
 */
public class HelloWorld {

    public static void main(String args[]) {
        System.out.println(" You have just run HelloWorld !");       
    }
}

如果你试着去调用:

java HelloWorld

它将导致错误: 无法找到或加载主类HelloWorld 。发生此错误是因为必须使用其 完全限定名 调用它。很明显,这个类的名称不是HelloWorld,而是 com.javahungry.HelloWorld . 尝试执行HelloWorld无效,因为不存在具有该名称的类。反正不在当前类路径上。

java  com.javahungry.HelloWorld

上述命令还将导致错误:无法找到或加载主类HelloWorld,因为未设置CLASSPATH环境变量。我不使用 -classpath-cp 命令来指定路径。默认情况下,java在默认目录中搜索类文件。

java -cp . com.javahungry.HelloWorld

如果classpath类路径正确,那么上面的命令将运行 HelloWorld 程序。否则,还会导致错误:无法找到或加载主类HelloWorld,因为 -cp . 命令确保JVM在当前目录中查找类文件。

如果错误仍然存在,请执行以下步骤。

必须确保.class文件的位置已添加到类路径中。假设“ /Users/SubhamMittal/Desktop/ ”在类路径classpath上,JVM查找名为 com.javahungry.HelloWorld ,它将在以下路径中查找.class文件:

/Users/SubhamMittal/Desktop/com/javahungry/HelloWorld

java -cp  /Users/SubhamMittal/Desktop/  com.javahungry.HelloWorld

耶!它会打印出来

You have just run HelloWorld !

上面的例子是在macos上执行的。

4. 在Windows操作系统的包中初始化

假设编译后的java类即HelloWorld(如上所示)位于下面的路径中

D:\project\com\javahungry\

HelloWorld 类的全名是

com.javahungry.HelloWorld

所以用 cd .. 返回命令以到达主目录

D:\project

然后发出java命令

java com.javahungry.HelloWorld

耶!程序在没有设置任何类路径的情况下成功运行。这是因为java正在寻找由.(dot)表示的当前目录,并且能够找到 .\com\javahunger\HelloWorld.class 类.

它会打印出来

You have just run HelloWorld !

5. 将CLASSPATH设置为当前目录

如果.class文件在当前文件夹中,则设置 . 到类路径CLASSPATH(注意,在Windows中,类路径分隔符是分号 而在Linux中,分隔符是冒号 )。

您可以在Windows中设置类路径:

set CLASSPATH = %CLASSPATH%;.

(注 . 最后为当前目录添加)

您可以在Linux中设置类路径:

export CLASSPATH = ${CLASSPATH}:.

(注 . 最后为当前目录添加)

如果您使用的是java 1.5或1.6,则不会出现错误: 找不到或无法加载主类 ,而会在线程“main”中出现异常 java.lang.NoClassDefFoundError : HelloWorld 。从JDK1.7开始,我们就收到了这个新错误。好消息是,解决方案完全相同。