在从系统控制台运行Java类(例如Hello world应用程序)时,我们可能会遇到此错误:Could not find or load main class(找不到或加载主类)。我们得到这个错误是因为我们错误地试图在类中使用java
命令运行main()
错误原因-无法找到或加载主类
考虑下面的Java类,它有一个main()
方法。我们正在尝试使用命令行执行MainClass
这个类。
package com.howtodoinjava.core.basic;
public class MainClass
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
如果我们尝试导航到创建.java文件的位置,并尝试运行该示例,就会出现此错误。
E:\java-examples\src\com\howtodoinjava\core\basic> javac MainClass.java
E:\java-examples\src\com\howtodoinjava\core\basic> java MainClass
Error: Could not find or load main class MainClass
解决方案
如果我们想在MainClass中执行main()
方法,我们必须在java命令中使用完整的类名,包括包名。
编译和执行此类的正确方法是:
E:\java-examples\src> javac com\howtodoinjava\core\basic\MainClass.java
E:\java-examples\src> java com.howtodoinjava.core.basic.MainClass
程序输出:
Hello, World!
应用程序已成功运行。这样,通过使用正确的类名和包名,并从包根文件夹执行java命令,我们可以解决这个错误。
在Java编程语言中,经常会遇到上面的错误和异常。但是一些最流行和最常见的错误常常是编程新手所面临的。在这些错误中,Java中找不到或加载不到主类是常见的错误之一。该错误表示java
命令未能找到或加载主类。它发生在我们试图运行一个程序时。当错误发生时,JVM在控制台上显示以下错误消息:
Error: Could not find or load main class ClassName
错误主要是在程序运行时错误地指定类名时产生的。
发生错误的原因
由于JVM未能加载主类或包名称,因此会生成错误。产生相同错误的其他原因如下:
- 类已在错误的包中声明。
- 类路径中缺少依赖项。
- 子目录路径与完全限定名不匹配。
- 类路径上有错误的目录。
- 应用程序的类路径指定不正确。
- 当我们使用类名参数出错时,也会发生这种情况。
错误的解决方案
为了避免或解决错误,我们需要指定绝对包名或类名。
不带包名
main类是定义main()
方法的类。让我们创建一个在控制台上生成并显示错误的程序。
DemoClass.java
public class DemoClass
{
public static void main(String[] args)
{
System.out.print("Enter a string: ");
//using console to input data from user
String name = System.console().readLine();
System.out.println("You have entered: "+name);
}
}
输出:
我们看到上面的程序编译运行成功。让我们生成在上述程序中找不到或无法加载主类的错误。为了生成并显示错误,我们在键入java
命令javademoclas
时拼错了类名。
当我们在类名的末尾指定.class
扩展名时,也会发生这种情况。
java DemoClass.class
为了避免错误,在使用java
命令时,不要在类名的末尾写入.class
扩展名。
java DemoClass
当我们没有将类放置在正确的文件夹中时,也会发生错误。在下图中,我们不在类所在的demo文件夹中。意思是DemoClass.class
文件必须在目录C:\demo中。
带包名
在上面的程序中,让我们创建一个名为com.javatpoint
. 这意味着,在编译以下Java程序时,.class
文件将在C:\demo\com\javatpoint\DemoClass.class
.
DemoClass.java
package com.javatpoint;
public class DemoClass
{
public static void main(String[] args)
{
System.out.print("Enter a string: ");
//reading a string from the user
String name = System.console().readLine();
System.out.println("You have entered: "+name);
}
}
输出:
请记住,如果类位于包中,则必须在java
命令中使用完整的类名,包括包名。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1874.html
暂无评论