“El tipo público <> debe definirse en su propio archivo” error en Eclipse

He escrito el siguiente código:

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(); } } 

Recibo el mensaje de error:

 The public type StaticDemo must be defined in its own file 

error en la primera línea public class StaticDemo { . ¿Por qué está sucediendo y cómo puedo resolverlo? Tenga en cuenta que el nombre de mi proyecto es StaticDemoShow , el nombre del paquete es staticshow y los nombres de clase son los que figuran en el código.

EDITAR – Después de hacer solo una clase pública o ambas clases predeterminadas, recibo el error “La selección no contiene un tipo principal”. ¿Y ahora que debo hacer?

No podemos tener dos clases públicas en un solo archivo. La JVM no puede entender, en un archivo debemos escribir una clase pública solamente.

 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(); } } 

No puedo tener dos clases públicas en el mismo archivo

  public class StaticDemo{ 

Cambiar a

  class StaticDemo{ 

Regla Java: una clase public en un archivo.

Guarde esta clase en el archivo StaticDemo.java . Además, no puedes tener más de una clase pública en un archivo.

No puede usar 2 instancias de clase pública, necesita usar una. Intenta usar clase (nombre) en lugar de clase pública (nombre)

error en la primera línea de clase pública StaticDemo {

Cualquier clase A que tenga un modificador de acceso como public debe tener un archivo fuente separado como A.java o A.jav . Esto se especifica en la sección JLS 7.6 :

Si y solo si los paquetes se almacenan en un sistema de archivos (§7.2), el sistema host puede optar por imponer la restricción de que es un error en tiempo de comstackción si no se encuentra un tipo en un archivo con un nombre compuesto por el nombre del tipo más una extensión (como .java o .jav) si cualquiera de los siguientes es verdadero:

  • El tipo se refiere a código en otras unidades de comstackción del paquete en el que se declara el tipo.

  • El tipo se declara público (y, por lo tanto, es potencialmente accesible desde el código en otros paquetes).

Sin embargo, es posible que deba eliminar public modificador de acceso public de la statement de clase StaticDemo . Entonces, como la clase StaticDemo no tendrá modificador, se convertirá en paquete privado , es decir, será visible solo dentro de su propio paquete.

Consulte Controlling Access to Members of a Class

Solo puede tener una clase pública en un archivo, de lo contrario obtendrá el error de lo que está obteniendo ahora y el nombre del archivo debe ser el nombre de la clase pública.

Tuve dos errores importantes en mi progtwig. De las otras respuestas, aprendí en un solo progtwig Java, uno no puede declarar dos clases como “públicas”. Así que cambié el especificador de acceso, pero obtuve otro error como agregar a mi pregunta como “EDITAR” que “La selección no contiene un tipo principal”. Finalmente observé que olvidé agregar la parte “String args []” en mi método principal. Es por eso que el código no estaba funcionando. Después de la rectificación, funcionó como se esperaba.