Archivo de clase Java

Un archivo de clase de Java es un archivo que contiene el código de bytes de Java y tiene la extensión .class que JVM puede ejecutar . Un compilador de Java crea un archivo de clase Java a partir de archivos .java como resultado de una compilación correcta. Como sabemos, un solo archivo fuente del lenguaje de programación Java ( o podemos decir un archivo .java ) puede contener una clase o más de una clase. Entonces, si un archivo .java tiene más de una clase, cada clase se compilará en archivos de clase separados.
Por ejemplo: guarde este código a continuación como Test.java en su sistema.

// Compiling this Java program would
// result in multiple class files.
  
class Sample
{
  
}
  
// Class Declaration
class Student
{
  
}
// Class Declaration
class Test
{
       public static void main(String[] args)   
       {
           System.out.println("Class File Structure");
       }
} 

Para compilar:

prueba javac.java

Después de la compilación habrá 3 archivos de clase en la carpeta correspondiente denominada como:

  • muestra.clase
  • estudiante.clase
  • prueba.clase

Una estructura de archivo de clase única contiene atributos que describen un archivo de clase.
Representación de la estructura de archivos de clase

ClassFile 
{
     magic_number;
     minor_version;
     major_version;
     constant_pool_count;
     constant_pool[];
     access_flags;
     this_class;
     super_class;
     interfaces_count;
     interfaces[];
     fields_count;
     fields[];
     methods_count;
     methods[];
     attributes_count;
     attributes[];
}

Los elementos del archivo de clase son los siguientes:

  1. número_mágico: Los primeros 4 bytes del archivo de clase se denominan número_mágico. Este es un valor predefinido que utiliza la JVM para identificar si el compilador válido genera el archivo .class o no. El valor predefinido estará en formato hexadecimal, es decir, 0xCAFEBABE .
    Ahora veamos qué sucede cuando JVM no encuentra un número mágico válido. Suponga que tenemos un archivo .java llamado Sample.java de la siguiente manera y siga el proceso paso a paso en su sistema.
  2. // class Declaration
    class Sample
    {
       public static void main(String[] args)
       {
           System.out.println("Magic Number");           
       }
    }
    

    Paso 1: Compile usando javac Sample.java
    Paso 2: Ahora abra el archivo Sample.class. Se parecerá a lo siguiente.

    Archivo de muestra.clase

    Paso 3: ahora borre al menos un solo símbolo de este archivo Sample.class desde el inicio del archivo y guárdelo.
    Paso 4: Ahora intente ejecutar esto usando el comando Java Sample y vea la magia, es decir, obtendrá una excepción de tiempo de ejecución ( vea el texto resaltado en la imagen a continuación ):
    Excepción de tiempo de ejecución debido a un número mágico no válido

    Nota: Esto puede variar dependiendo de cuánto elimine los datos del archivo .class .

  3. minor_version & major_version: Ambos juntos representan la versión del archivo .class . JVM utilizará estas versiones para identificar qué versión del compilador genera el archivo .class actual. Denotamos la versión del archivo de clase como Mm, donde M representa versión_principal y m representa versión_secundaria
  4. Nota : el archivo .class generado por el compilador de la versión inferior puede ejecutarse mediante la JVM de versión alta, pero el archivo .class generado por el compilador de la versión superior no puede ejecutarse mediante la JVM de versión inferior. Si intentamos ejecutar, obtendremos una excepción de tiempo de ejecución.

    Esta demostración es para el sistema operativo Windows de la siguiente manera:

    Paso 1: abra una ventana del símbolo del sistema e intente verificar la versión del compilador de Java y la versión de JVM usando los siguientes comandos respectivamente (el texto resaltado en la imagen son los comandos)
    La salida para la versión 1.8 será:
    Versión del compilador de Java
    Versión JVM

    Paso 2: Ahora verifique con otra versión que puede ser superior o inferior a la que ya está instalada. este enlace de descarga.
    E instálelo en su PC o computadora portátil y anote la dirección de instalación.
    Paso 3: abra una segunda ventana del símbolo del sistema y configure la ruta de la carpeta bin del jdk instalado durante el segundo paso. Y verifique la versión del compilador de Java y la versión de JVM.
    Comprobación de la versión de JDK 1.6
    Paso 4: ahora, en el primer símbolo del sistema, compile cualquier archivo .java válido . Por ejemplo: consulte el archivo Sample.java anterior . Compílelo como:
    Compilando con la versión 1.8 del compilador
    Paso 5: Ahora, en la segunda ventana del símbolo del sistema, intente ejecutar el archivo de clase de código compilado anterior y vea qué sucede. Hay una excepción de tiempo de ejecución que he resaltado en la imagen de abajo.

    Excepción de tiempo de ejecución debido a una versión principal y secundaria no válida del archivo de clase

    Nota: Internamente, la versión jdk 1.5 significa 49.0 y 1.6 significa 50.0 y 1.7 significa 51.0, etc. versión del archivo de clase donde los dígitos antes del punto decimal representan la versión principal y los dígitos después del punto decimal representan la versión secundaria.

    1. constant_pool_count: Representa el número de constantes presentes en el conjunto de constantes (cuando se compila un archivo Java, todas las referencias a variables y métodos se almacenan en el conjunto de constantes de la clase como una referencia simbólica) .
    2. constant_pool[]: Representa la información sobre las constantes presentes en el archivo de pool de constantes.
    3. access_flags: proporciona la información sobre los modificadores que se declaran en el archivo de clase.
    4. this_class: representa el nombre completo del archivo de clase.
    5. super_class: representa el nombre completo de la superclase inmediata de la clase actual. Considere el archivo Sample.java anterior . Cuando lo compilemos, podemos decir que this_class será la clase Sample y super_class será la clase Object.
    6. interface_count: Devuelve el número de interfaces implementadas por el archivo de clase actual.
    7. interface[]: Devuelve información de las interfaces implementadas por el archivo de clase actual.
    8. fields_count: Representa el número de campos (variable estática) presentes en el archivo de clase actual.
    9. campos[]: Representa la información de los campos (variable estática) presentes en el archivo de clase actual.
    10. method_count: representa el número de métodos presentes en el archivo de clase actual.
    11. method[]: Devuelve información sobre todos los métodos presentes en el archivo de clase actual.
    12. atributos_cuenta: Devuelve el número de atributos (variables de instancia) presentes en el archivo de clase actual.
    13. atributos[]: proporciona información sobre todos los atributos presentes en el archivo de clase actual.

Publicación traducida automáticamente

Artículo escrito por Anshul_Aggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *