找不到或无法加载主类什么意思?
今天我们将探讨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开始,我们就收到了这个新错误。好消息是,解决方案完全相同。