“必须在自己的文件中定义公共类型&lt; <classname>&gt;”Eclipse中的错误</classname>

时间:2013-11-06 14:29:37

标签: java eclipse

我写了以下代码:

package staticshow;


public class StaticDemo {
  static int a = 3;
  static int b = 4;

  static {
    System.out.println("Voila! Static block put into action");
  }

  static void show() {
    System.out.println("a= " + a);
    System.out.println("b= " + b);
  }
}

public class StaticDemoShow {
  public static void main() {
    StaticDemo.show(); 
  }
}

我收到错误消息:

The public type StaticDemo must be defined in its own file
第一行public class StaticDemo {出现

错误。为什么会这样,我该如何解决?请注意,我的项目名称为StaticDemoShow,包名称为staticshow,类名称在代码中给出。

编辑 - 将一个类公开或两个类都默认后,我收到错误“选择不包含主类型”。现在该怎么办?

8 个答案:

答案 0 :(得分:25)

我们在一个文件中不能有两个公共类。 JVM无法理解,在一个文件中我们只能编写一个公共类。

public class StaticDemo {

    static int a = 3;
    static int b = 4;

    static {
        System.out.println("Voila! Static block put into action");
    }

    static void show() {
        System.out.println("a= " + a);
        System.out.println("b= " + b);
    }

}
 class StaticDemoShow {
    public static void main() {
        StaticDemo.show();
    }

}

答案 1 :(得分:10)

在同一个文件中不能有两个公共类

   public class StaticDemo{

更改为

   class StaticDemo{

答案 2 :(得分:5)

Java规则:一个文件中有一个public类。

答案 3 :(得分:2)

将此类保存在 StaticDemo.java 文件中。 此外,您不能在一个文件中拥有多个公共类。

答案 4 :(得分:1)

您不能使用2个公共类实例,您需要使用一个。尝试使用类(名称)而不是公共类(名称)

答案 5 :(得分:1)

  第一行公共类StaticDemo {

中的

错误

任何具有A访问修饰符的类public必须具有单独的源文件A.javaA.javThis is specified in JLS 7.6 section

  

当且仅当包存储在文件系统(第7.2节)中时,主机   系统可以选择强制执行编译时的限制   如果在由...组成的名称下的文件中找不到类型,则会出错   类型名称加上一个扩展名(如.java或.jav)   以下是真的:

     
      
  • 该类型由声明类型的包的其他编译单元中的代码引用。

  •   
  • 该类型声明为 public (因此可以从其他包中的代码访问)。

  •   

但是,您可能必须从类声明public中删除StaticDemo访问修饰符。然后由于StaticDemo类没有修饰符,它将变为 package-private ,也就是说,它只能在自己的包中可见。

查看Controlling Access to Members of a Class

答案 6 :(得分:0)

你可以在一个文件中只有一个公共类,否则你将得到你现在得到的错误,文件名必须是公共类的名称

答案 7 :(得分:0)

我的程序中有两个重大错误。从其他答案中,我在单个java程序中学到了,不能将两个类声明为“public”。所以我更改了访问说明符,但是在我的问题中添加了另一个错误“编辑”,“选择不包含主类型”。最后我发现我忘了在主方法中添加“String args []”部分。这就是代码无效的原因。经过整改,它按预期工作。