Java 为什么编译器会说;找不到或无法加载主类“;当main(String[]args)是一个方法时?

Java 为什么编译器会说;找不到或无法加载主类“;当main(String[]args)是一个方法时?,java,main,Java,Main,以这段代码为例 public class Hello { static void main(String[] args) { System.out.println("Hello World"); } } 在这里,我没有为main方法编写public,而是编译了这个类。当我运行程序时,为什么错误读为“找不到或加载主类Hello.java” 我的问题是,如果main(String[]args)是一个'metho

以这段代码为例

public class Hello
    {
        static void main(String[] args)
        {
            System.out.println("Hello World");
        }
    }
在这里,我没有为main方法编写public,而是编译了这个类。当我运行程序时,为什么错误读为“找不到或加载主类Hello.java”

我的问题是,如果main(String[]args)是一个'method',那么为什么要说'main class'?关键不是public是否存在。关键是我更改了访问修饰符,这导致main(字符串[]args)对JVM不可见。那么,为什么JVM会说main classnot main()方法

如果这是一个愚蠢的问题,那么我真的很后悔问这个问题

编辑:- 这是错误消息

Error: Could not find or load main class Hello.java
这里有两个问题

  • main()
    必须声明为
    public static void
  • 然而,真正的问题是您的命令行。显然是这样

    java Hello.java
    
    应该是的

    java Hello
    
    这里没有像
    Hello.java
    这样的类。该类的名称是
    Hello


  • main
    必须是公共的。我认为答案是可以找到的——如果您希望main可用作程序的入口点(它的正常用例),main需要声明为公共的。你能看一下吗?别后悔问愚蠢的问题。其他人还能学到什么?(不是说这是一个愚蠢的问题)错误消息中使用“main class”一词的原因可能是JVM试图加载命令行中命名的“main class”,但找不到它。我不知道为什么这件事如此神秘。他的问题不是关于它是否公开。(来自OP的问题)关键不在于公众是否在场。关键是我更改了访问修饰符,这导致main(字符串[]args)对JVM不可见。那么为什么JVM说的是main class而不是main()方法呢?@GBlodgett正是如此,我在(2)中回答了这个问题。请阅读这里写的内容。你自己的回答也涉及(1),因此当我这样做时,你不能理性地抱怨,而且它也无法确定(2)的正确原因。未找到
    main
    方法不会导致此错误消息,即不会导致加载类的完全失败。在你进一步讨论这个问题之前,试一下。我并不是想说你的答案在任何方面都是低劣的。(我将要求OP拒绝接受我的,这样他们就可以接受你的)我只是想说OP知道它应该是公开的。(或者至少根据我在评论中的片段,他们似乎是这样做的)@GBlodgett我们都知道它必须是
    公共的
    。你自己的回答也是如此。我不知道你为什么唠叨这个。在这里列举所有需要修复的错误本身并没有什么错。