【问题标题】:"The method main cannot be declared static; static methods can only be declared in a static or top level type"“方法 main 不能声明为静态;静态方法只能声明为静态或顶级类型”
【发布时间】:2014-05-12 07:07:09
【问题描述】:
class Perkusja {
  boolean talerze = true;
  boolean beben = true;

  void zagrajNaBebnie() {
    System.out.println("bam, bam, baaaa-am-am");
  }
  void zagrajNaTalerzach() {
    System.out.println("brzdęk, brzbrzrzdęęk");
  }
  class PerkusjaTester {
    public static void main(String[] args) {
        Perkusja p = new Perkusja();
    }
  }
}

你好!我是 stackoverflow 的新手,所以请原谅我糟糕的编辑。

我是 Java 新手,我无法弄清楚问题到底出在哪里以及问题出在哪里。 我在线上收到以下错误 public static void main(String[]args):

方法 main 不能声明为 static;静态方法只能在静态或顶级类型中声明

我正在使用 eclipse 并且正在做一些简单的 java 练习。我用谷歌搜索了这个问题,但答案通常与更复杂的代码片段有关。

我该如何解决它以及以下错误的原因是什么?对于这个特定示例的解释,我将不胜感激。

干杯!

【问题讨论】:

    标签: java static compilation main


    【解决方案1】:

    您在PerkusjaTester 中声明您的主要方法,这是Perkusja 的内部类。这是禁止的。

    你应该在Perkusja类之外声明你的测试类

    注意:PerkusjaTester 是一个内部类,而不是静态嵌套类。这就是为什么PerkusjaTester 不是静态类型的原因。正如 Jon Skeet 所提到的,您还可以在 PerkusjaTester 类上添加关键字 static

    【讨论】:

    • 当然也可以将PerkusjaTester 设为静态嵌套类。那也行。
    • @JonSkeet 编辑了我的评论。谢谢。
    • 是的,声明为静态嵌套类使您可以使用静态方法,但您也可以轻松地删除方法签名的静态修饰符并从外部类的构造函数调用它。
    【解决方案2】:

    此代码无法工作,因为从概念上讲,Perkusja 的实例必须在调用 main 之前声明。

    这是因为内部类PerkusjaTester没有标记为静态。

    最好的解决办法是写static class PerkusjaTester {

    那么main就可以访问了。

    【讨论】:

      【解决方案3】:

      PerkusjaTester 中的 main 方法是 Perkusja 的内部类,这是被禁止的。考虑到您是新手,我可以给出的简单答案是,删除最后一个大括号并将其放在class PerkusjaTester 上方,错误将被删除。

      【讨论】:

        猜你喜欢
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        • 2013-08-01
        • 2010-09-06
        • 2010-09-24
        相关资源
        最近更新 更多