【问题标题】:Why does the compiler say "main class could not be found or loaded" when main(String[] args) is a method?当 main(String[] args) 是一种方法时,为什么编译器会说“找不到或加载主类”?
【发布时间】:2018-11-13 05:43:18
【问题描述】:

以这段代码为例

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(string[] args) 对 JVM 不可见的访问修饰符。那么为什么JVM会说ma​​in classnot main() method呢?

附:如果这是一个愚蠢的问题,那我真的很后悔提出这个问题。

编辑:- 这是错误信息

Error: Could not find or load main class Hello.java

【问题讨论】:

  • main 必须是公开的。
  • 我认为答案可以在here 中找到——如果您希望 main 可用作程序的入口点(其正常用例),则需要将 main 声明为 public。可以看看吗?
  • 不要后悔提出愚蠢的问题。其他人将如何学习? (不是想说这是一个愚蠢的问题)
  • 错误信息中使用'main class'字样的原因是JVM试图加载命令行中命名的'main class'却找不到。我不知道为什么这么神秘。

标签: java main


【解决方案1】:

这里有两个问题。

  1. main() 必须声明为 public static void
  2. 然而真正的问题是你的命令行。显然是

    java Hello.java
    

    应该是的

    java Hello
    

    这里没有Hello.java 这样的类。班级名称是Hello

【讨论】:

  • 他的问题不在于它是否公开。 (来自 OP 的问题)关键不在于公众是否存在。关键是我更改了导致 main(string[] args) 对 JVM 不可见的访问修饰符。那么为什么 JVM 说的是 main 类而不是 main() 方法呢?
  • @GBlodgett 没错,我在 (2) 中回答了这个问题。请阅读这里写的内容。您自己的答案也针对(1),因此当我这样做时您无法理性地抱怨,并且也无法确定(2)的正确原因。找不到main 方法不会导致此错误消息,即不会导致加载类完全失败。在进一步辩论之前先尝试一下。
  • 我并不是要说您的答案在任何方面都较差。 (我将要求 OP 不接受我的,以便他们可以接受你的)我只是想说 OP 知道它应该是public。 (或者至少根据我在评论中的 sn-p 看来他们是这样做的)
  • @GBlodgett 我们都知道必须是public。你自己的回答说同样的话。我不知道你为什么在这件事上喋喋不休。枚举 all 需要在此处修复的错误本身并没有错。
猜你喜欢
  • 2015-11-16
  • 1970-01-01
  • 2019-06-15
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 2017-03-04
  • 2014-05-13
相关资源
最近更新 更多