una txt texto que programas por mismo metodos metodo linea leer las instanciar está esta escribir escriben elementos ejemplos definen cuántas constituida con como clases clase atributos archivos archivo abrir java

txt - que es un metodo en java



¿Por qué solo 1 clase pública en un archivo Java? (10)

Cortesía del Dr. Heinz Kabutz y su excelente newsletter ...

¿Por qué cada clase pública está en un archivo separado?

Esta es una pregunta que me han preguntado con frecuencia durante mis cursos. Hasta ahora no he tenido una buena respuesta a esta pregunta. En la sección 1, leemos: "Aunque cada unidad de compilación de Oak puede contener múltiples clases o interfaces, como máximo una clase o interfaz por unidad de compilación puede ser pública".

En la barra lateral explica por qué: "Esta restricción aún no es aplicada por el compilador, aunque es necesaria para una importación eficiente de paquetes"

Es bastante obvio, como la mayoría de las cosas son una vez que conoces los motivos de diseño, el compilador tendría que hacer un pase adicional a través de todas las unidades de compilación (archivos .java) para averiguar qué clases estaban donde, y eso haría la compilación aún más lenta .

En cualquier archivo Java, ¿por qué podemos tener solo una clase pública cuyo nombre es el mismo que el nombre del archivo Java?


Creo que esta puede ser una posible razón. Solo puede haber una clase pública en un archivo java porque el nombre del archivo java es el mismo que el nombre de la clase pública. Y, obviamente, no podemos tener un archivo con dos nombres diferentes.


Estas son las reglas. Aunque no es del todo cierto. Puedes definir clases internas dentro de ti clase "principal" de esta manera:

public class A { public class B { ... } }


Java utiliza esta convención para encontrar el bytecode de clase / interfaz comenzando en la ruta de clase y buscando la jerarquía de paquetes en los subdirectorios. La representación del sistema de archivos de esta jerarquía también impone algunas reglas básicas.

  1. Cualquiera de las dos clases o interfaces de Java en el mismo paquete no pueden tener el mismo nombre. Los nombres de los archivos entrarían en conflicto.
  2. Cualquiera de los dos paquetes de Java en el mismo paquete principal no podría tener el mismo nombre. Las rutas de la carpeta entrarían en conflicto.
  3. Una clase tiene visibilidad para todas las clases en el mismo paquete sin modificación a la ruta de clase.

Obliga a que todo el código Java se organice de cierta manera , lo que a la larga ayuda a mejorar la legibilidad del código .

Los diseñadores de Java eligieron un enfoque estricto que refuerza su idea de buenas prácticas de diseño, y esto es parte de ese tema. Contrasta eso con la actitud de todo vale en Perl.


Para entender la razón básica detrás de estas restricciones, supongamos que el compilador no da error de compilación por no nombrar el nombre del archivo igual que el nombre de la clase pública.

Supongamos que hay un paquete A

A / / file1.java file2.java

file1.java

package A; class file1 { public static void main(String args[]) { } } public class file3 { public static void main(String args[]) { } }

Ahora que sabemos que también se puede acceder a una clase pública fuera del paquete, ahora será responsabilidad de un desarrollador hacerla accesible al mundo exterior. Veamos cómo:

Supongamos que el paquete A contiene solo archivos Java (no archivos de clase) y alguna clase fuera del paquete A intenta acceder al archivo de clase pública3, el compilador primero intentará encontrar file3.class (no disponible), luego intentará encontrar file3.java ( no disponible ). Entonces, aunque la clase file3 es pública por naturaleza, no es visible para el mundo exterior. Entonces, si un compilador pone la restricción de que si un archivo contiene una clase pública, debería tener el mismo nombre que el nombre de la clase pública, entonces el problema anterior puede resolverse y el desarrollador no tendrá que pensar en exponer la clase pública al mundo exterior .

El compilador también pone la restricción de que debería haber casi una clase pública por archivo Java, de modo que el mundo exterior pueda acceder a todas las clases públicas.


Para tener un entendimiento entre el compilador y el programador. Es una regla que el código fuente debe tener casi una clase pública y que la clase debe contener la función principal. Entonces, sin ninguna confusión / restricción, el compilador puede acceder (público) a la clase y nombre el nombre de la clase al archivo de la clase. Además, como esta clase contiene el main (), la ejecución del archivo de la clase dará el flujo correcto


Permite una búsqueda más eficiente de los archivos de origen ( .java) y compilados ( .class) durante la compilación (directiva de importación) y una carga de clases más eficiente durante la ejecución. La idea es: si conoce el nombre de una clase, sabe dónde se debe encontrar para cada entrada classpath. No se requiere indexación.


Según esta fuente , es para una compilación eficiente:

En la barra lateral explica por qué: "Esta restricción aún no es aplicada por el compilador, aunque es necesaria para una importación eficiente de paquetes"

Es bastante obvio, como la mayoría de las cosas son una vez que conoces los motivos de diseño, el compilador tendría que hacer un pase adicional a través de todas las unidades de compilación (archivos .java) para averiguar qué clases estaban donde, y eso haría la compilación aún más lenta .

Lo mismo se aplica también a las importaciones de archivos de origen en IDE. Otra razón sería el tamaño de fuente razonable.


Solo podemos tener una clase o interfaz pública de nivel superior en cualquier unidad de compilación java (archivo fuente .java).

Pero puede haber cualquier número de clases / interfaces predeterminadas por archivo src.

por qué:

JLS deja la opción al compilador de java. Y la mayoría de las implementaciones del compilador obligan a tener el mismo nombre de archivo:

(1) la clase pública / nombre de la interfaz

(2) Si hay un método principal y no una clase pública, entonces cualquier nombre

(3) Si hay un método principal y una clase pública, el método principal debe estar en esa clase pública

(4) si no hay una clase pública ni un método principal, entonces cualquier nombre válido que pueda o no coincidir con los nombres de clase / interfaz en el archivo.

Desde (2): si se permiten dos clases públicas, deberíamos asignar al archivo dos nombres que carecen de significado para el sistema de archivos. De (3): si se permiten dos clases públicas, deberíamos tener dos métodos principales que es terriblemente sin sentido para Java

Por lo tanto, un archivo fuente Java puede tener una única clase pública.

Creo que los 4 puntos anteriores son forzados por el compilador para hacer que el compilador y jvm trabajen para encontrar un archivo de fuente Java o un archivo de clase en particular de manera fácil y rápida para la compilación / carga / vinculación. Java tiene tales restricciones incorporadas que los desarrolladores deben seguir para tener una mejor programación.

Fuente: Mis lecturas y comprensión.