2011-01-28 8 views

Respuesta

9

Bueno, no es una restricción obligatoria en Java. Es uno que la especificación de lenguaje Java menciona como una opción . De section 7.6 of the JLS:

Cuando los paquetes se almacenan en un sistema de archivos (§7.2.1), el sistema anfitrión puede elegir para hacer cumplir la restricción de que se trata de un error en tiempo de compilación si un tipo no se encuentra en un archivo bajo un nombre compuesto por el nombre del tipo más una extensión (tal como .java o .jav) si cualquiera de lo siguiente es cierto:

  • el tipo se conoce por el código en otras unidades de compilación del paquete en el que el tipo está declarado.
  • El tipo se declara público (y, por lo tanto, es potencialmente accesible desde el código en otros paquetes).

Esta restricción implica que debe haber como máximo un tipo de este tipo por unidad de compilación. Esta restricción hace que sea fácil para un compilador del lenguaje de programación Java o una implementación de la máquina virtual Java encontrar una clase nombrada dentro de un paquete; por ejemplo, el código fuente de un tipo público wet.sprocket.Toad se encontraría en un archivo Toad.java en el directorio wet/sprocket, y el código objeto correspondiente se encontraría en el archivo Toad.class en el mismo directorio.

Pero básicamente está ahí para alentarlo a hacer que su fuente sea más fácil de navegar. Si conoce el nombre de una clase pública, generalmente es bastante fácil encontrar el código fuente para ello.

+3

Es una restricción opcional, pero (que yo sepa) todas las principales implementaciones de Java (compiladores, JVM, entornos de desarrollo, etc.) cumplir. –

+0

bien entiendo que esta regla es para convención para navegar fácilmente por el archivo fuente y la clase.pero por qué no puedo tener más de un archivo público y por qué no se aplica la misma convención para la clase no pública (paquete predeterminado-mismo) – saravanan

+2

@ user587072: ¿Qué quiere decir con "por qué no puedo tener más de un archivo público"? Un archivo no es público, una clase es. Y si tiene más de una clase pública, no pueden * ambos * tener el nombre relevante, por lo que al menos uno de ellos sería más difícil de encontrar. En cuanto a por qué no se aplica a las clases no públicas: presumiblemente, el punto es que es más probable que los desarrolladores quieran encontrar el código fuente de una clase pública que no pública. Pero realmente estoy adivinando, para ser honesto. Creo que la convención tiene sentido para todas las clases cuando sea posible. –

1

sí, es la especificación del lenguaje Java ...

1

La razón es, que esta es la convención. Además, el cargador de clases espera una clase en un archivo específico. Puede escribir su propio cargador de clases para evitar esta restricción, pero no hay una buena razón para hacerlo. Cualquiera que mire su código se confundirá. ;)

Sin embargo, puede crear clases "múltiples" en un archivo mediante la creación de clases internas. Lo sé, no es lo mismo, pero por lo general debes pensar en cosas más importantes que por qué solo hay una clase en un archivo.

+0

No es solo una convención. Es una restricción opcional que se especifica explícitamente en el JLS. –

0

Está ahí para que el compilador pueda encontrar el código fuente de las clases dependientes.

0

@saravanan. He ejecutado algunos programas simples que muestran que solo una clase predeterminada (es decir, una clase sin especificador de acceso) que tiene el método principal funciona bien en Java cuando guarda el nombre del archivo con el nombre de clase predeterminado.

Para agregar al motivo de nombrar el archivo con nombre de clase pública, en un documento revisé los detalles en este estado que la JVM busca la clase pública (ya que no hay restricciones y se puede acceder desde cualquier lugar) y también busca el vacío público principal() en la clase pública.

Esta clase pública actúa como la clase inicial desde donde se inicia la instancia JVM para la aplicación java (programa). Así que cuando proporciona más de una clase pública en un programa el compilador lo detiene lanzando un error.

Esto se debe a que más adelante no se puede confundir a la JVM con respecto a qué clase es su clase inicial porque solo una clase pública con la public static void main(String args[]) es la clase inicial de JVM.

HOPE Te he ayudado a comprender mejor la programación de JAVA.

0

simplemente recordar sólo esa clase sería público que tiene las principales otros archivos No sea pública

Cuestiones relacionadas