“公共类型<>必须在自己的文件中定义”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 ,类名称在代码中给出。

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

我们在一个文件中不能有两个公共类。 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(); } } 

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

  public class StaticDemo{ 

改成

  class StaticDemo{ 

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

将此类保存在StaticDemo.java文件中。 你也不能在一个文件中有多个公共类。

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

公共类StaticDemo {第一行中的错误

任何具有public访问修饰符的A类必须具有单独的源文件A.javaA.jav这在JLS 7.6部分中指定

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

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

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

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

检查控制对类成员的访问

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

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