2011-10-17 5 views

Respuesta

3

javac produce *.class archivos para cada uno que ocurren en el archivo .java. Entonces, ninguno de ellos, el compilador simplemente no hace nada. Nada le da a un jvm.

9

No existe una relación de uno a uno entre .java-files y .class-files. Lo que tiene es una relación de uno a uno entre clases (o clase-declaraciones) y .class-files.

Un archivo Java de código con cero de clase declaraciones no dará lugar a ningún .class archivos, así que no es realmente manejado por la JVM en absoluto.

$ touch Test.java 

$ ls 
Test.java 

$ javac Test.java 

$ ls 
Test.java 

En la especificación del lenguaje Java un archivo Java de código es sinónimo de una Unidad de Recopilación . La sección relevante en el JLS es 7.3 Compilation Units.

La gramática se describe como sigue:

CompilationUnit:
          PackageDeclaration opt ImportDeclarations opt TypeDeclarations opt
...

opt -subscript dice que la pieza es opcional. Como TypeDeclarations es opcional, no es necesario que existan declaraciones de clase.

+0

Vacié un archivo '.java' (que tenía un código fuente que daba como resultado un archivo' .class') y puse solo un comentario adentro (nada más que el comentario). Tan pronto como lo guardé en Eclipse, el archivo '.class' desapareció. Pensé que daría un error, pero no fue así. Gracias por esta explicación. * Cuanto más sepa:) * – ADTC

1

Un archivo fuente vacío no creará ningún archivo de clase, por lo que no hay nada que pueda "manipular" la JVM. Y un archivo de clase vacío (que no es algo que el compilador creará) no es válido, lo que probablemente resulte en un ClassFormatError o algo así, si esa era su pregunta.

+0

gracias chicos por las respuestas .. – srini

Cuestiones relacionadas