Java &引用;main方法不能声明为静态;静态方法只能在静态或顶级类型中声明;

Java &引用;main方法不能声明为静态;静态方法只能在静态或顶级类型中声明;,java,static,compilation,main,Java,Static,Compilation,Main,你好!!我是stackoverflow的新手,所以请原谅我糟糕的编辑 我是Java新手,不知道问题到底出在哪里,出在哪里。 我在线路上遇到以下错误 公共静态void main(字符串[]args): main方法不能声明为静态;静态方法只能在静态或顶级类型中声明 我正在使用eclipse,我正在做一些简单的java练习。我用谷歌搜索了这个问题,但答案通常与更复杂的代码片段有关 我如何修复它,以及以下错误的原因是什么?如果您能解释一下这个例子,我将不胜感激 干杯 您正在PerkusjaTester

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

我是Java新手,不知道问题到底出在哪里,出在哪里。 我在线路上遇到以下错误
公共静态void main(字符串[]args)

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

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

我如何修复它,以及以下错误的原因是什么?如果您能解释一下这个例子,我将不胜感激


干杯

您正在
PerkusjaTester
中声明main方法,它是
Perkusja
的一个内部类。这是禁止的

您应该在类
Perkusja


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

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

这是因为内部类
PerkusjaTester
未标记为静态

最好的修复方法是编写
静态类PerkusjaTester{


然后可以访问
main

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

或make
perkusjaTester
当然是一个静态嵌套类。这也行。@JonSkeet编辑了我的评论。谢谢。是的,声明为静态嵌套类使您可以使用静态方法,但您也可以轻松地删除方法签名的静态修饰符,并从外部类的构造函数调用它。
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();
    }
  }
}