Red de conocimientos turísticos - Información de alquiler - ¿Debe haber clases públicas en los archivos fuente de Java?

¿Debe haber clases públicas en los archivos fuente de Java?

Sí, y sólo puede haber una, explicado a continuación:

Cada unidad de compilación (archivo) sólo puede tener una clase pública. Esto significa que cada unidad de compilación

solo puede tener una interfaz pública, representada por su clase pública.

Creo que esta es una conclusión extraída del diseño de la arquitectura de software y del diseño de seguridad. O los diseñadores de JAVA también sacaron conclusiones sobre este aspecto. Quizás esto realmente sea una norma, pero no encontré ninguna información al respecto

No sé si existe tal cosa. Si es así, proporcione la fuente.

El experimento es el siguiente:

Archivo fuente Test3.java:

clase Test1

{

int i = 1;

}

clase Prueba2

{

int i = 2;

público static void main (String[] args)

{

System.out.println("método principal");

}

}

C:/javatestgt;javac Test3.java

C:/javatestgt;Java Test2

método principal

Nota: La compilación no se produjo. Se produjo un error. Tenga en cuenta que se ejecutó Test2 porque no se generó el archivo Test3.class. Si ejecuta Test3, se produce un error

Clase no encontrada

C:/javatestgt;java Test3

Excepción en el hilo "principal" java.lang NoClassDefFoundError. : Test3

Motivo: java.lang.ClassNotFoundException: Test3

en java.NET.URLClassLoader$1.run(Fuente desconocida)

en java.security. AccessController.doPrivileged(Método nativo)

en java.Net.URLClassLoader.findClass(Fuente desconocida)

en java.lang..loadClass(Fuente desconocida)

en sun.misc.Launcher$AppClassLoader.loadClass(Fuente desconocida)

en java.lang.ClassLoader.loadClass(Fuente desconocida)

No se pudo encontrar la clase principal: el programa salida.

El motivo de este error es simple: el cargador de clases en la JVM no puede encontrar Test3.class

Además, aquí está el motivo del error. Esto también muestra que si desea ejecutar una clase que contenga main(), la clase no necesariamente tiene que ser pública.

Más profundamente en jvm, la segunda edición tiene este pasaje:

Una instancia de VM java ejecuta un programa Java llamando a main() de una clase, que debe ser pública

static void y tomando una serie de cadenas como parámetros, cualquier clase con main() se puede ejecutar como un programa Java. Cualquier clase con main() se puede ejecutar como un programa Java.

No dice que la clase con el método main() deba ser una clase pública.

Archivo fuente Test7.java:

clase Test5

{

int i = 1;

}

clase pública Test6

{

int i = 2;

public static void main(String[] args)

{

System.out.println("método principal");

}

Si ejecuta Test7.java, se generará un error. informado:

C:/javatestgt;javac Test7.java

Test7.java:8: La clase Test6 es pública y debe declararse en un archivo llamado Test6.java

p>

Clase pública Prueba6

^1 Error

Esto explica que el nombre del archivo debe ser el mismo que el nombre de la clase pública (si hay una clase pública en el archivo)

Aquí puedes ver que si hay varias clases públicas, ¿cuál clase pública debería ser el nombre del archivo? Obviamente, un archivo fuente java

sólo puede tener una clase pública.

Entonces el resumen es el siguiente: Un archivo fuente Java puede tener como máximo una clase pública. Cuando hay una clase pública, el nombre del archivo fuente debe ser

coherente con ella. de lo contrario, no se puede compilar. Si no hay una clase pública en el archivo fuente, no existe ningún requisito de coherencia entre el nombre del archivo y la clase.

En cuanto a main(), no es necesario colocarlo en una clase pública para ejecutar el programa.

Las conclusiones anteriores son las conclusiones extraídas a través de experimentos. Personalmente creo que esto es suficiente. Si debes preguntar al final, es posible que tengas que preguntarle al diseñador de la plataforma Java.

Quizás todos dirán: Esto se debe al diseño de Java y al diseño de la arquitectura interna de JVM. Esto es una norma y no tiene sentido.