¿Qué es el formato de archivo CLASS?
Un archivo .class contiene código fuente compilado escrito en el lenguaje de programación Java. Los archivos .class son generados por el compilador de Java a partir de archivos fuente .java que definen una o más clases. Cada archivo .class es el resultado de una compilación exitosa y contiene bytecode: una representación binaria de una clase que es ejecutada por la Java Virtual Machine (JVM).
Los archivos .class se generan automáticamente durante la compilación de los archivos fuente .java. Debido a que el bytecode es independiente de la plataforma, el mismo archivo .class se ejecuta en cualquier sistema operativo que tenga instalada una JVM compatible. Un solo archivo fuente .java puede contener una o más clases, y cada clase obtiene su propio archivo .class durante el proceso de compilación.
La compilación de archivos .java en archivos .class se realiza mediante el comando javac incluido en el Java Development Kit (JDK). La mayoría de los entornos de programación Java -incluyendo IDEs como IntelliJ IDEA y Eclipse- compilan archivos .class automáticamente a medida que los programadores escriben código.
El Java Runtime Environment (JRE) admite la ejecución de archivos .class a través del comando java, pero no permite la compilación ya que el JRE no incluye el compilador javac.
Cada archivo .class comienza con el número mágico de 4 bytes 0xCAFEBABE, seguido de campos de versión menor y mayor que identifican la versión de Java utilizada para compilarlo. Los archivos .class múltiples se empaquetan comúnmente juntos en un archivo JAR para su distribución y despliegue.
Debido a que la JVM está disponible en muchas versiones, se debe tener en cuenta que no todos los archivos .class son compatibles con todas las versiones del entorno de ejecución. Un archivo compilado para una versión mayor de Java más reciente no puede ser cargado por una JVM más antigua.
Seguridad y protección
RIESGO: MEDIUMUn archivo .class es código compilado: si lo ejecutas («java MyClass») con una JVM, se ejecuta con los permisos de tu usuario, por lo que una clase desconocida -al igual que un JAR o EXE desconocido- puede contener malware. Trata el Java compilado descargado como no confiable: solo ejecuta clases de una fuente en la que confíes. El simple hecho de descompilar o desensamblar un .class (JD-GUI, javap) no lo ejecuta y es seguro. Ten en cuenta que el bytecode revela la lógica de un programa, por lo que cualquier cosa que compiles puede ser descompilada por otros a menos que esté ofuscada.
Detalles del formato
en pocas palabrasProgramas que abren archivos CLASS
Detalles técnicos
especificación profunda| Tipo de formato | Bytecode de Java compilado (binario) |
| Tipo MIME | application/java-vm |
| Bytes mágicos | 0xCAFEBABE (4 bytes en el desplazamiento 0) - presente en cada archivo .class válido |
| Codificación de versión | Los bytes 6-7 (versión mayor) identifican la versión de Java de destino; p. ej., 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Entorno de ejecución | Java Virtual Machine (JVM) a través del comando `java` |
| Herramienta de compilación | Compilador `javac`, incluido en el Java Development Kit (JDK) |
| Independencia de plataforma | El bytecode es neutral respecto a la arquitectura de la CPU y se ejecuta en cualquier SO con una JVM compatible |
| Una clase por archivo | Cada clase de nivel superior o clase anidada estática se compila en su propio archivo `.class` separado |
| Nomenclatura de clases internas | Las clases internas y anónimas producen archivos adicionales con `$` en el nombre (p. ej., `Outer$Inner.class`) |
| Pool de constantes | Cada archivo incorpora una tabla estructurada de pool de constantes que contiene literales de cadena, nombres de clases y descriptores de campos/métodos |
| Conjunto de instrucciones | Utiliza el conjunto de instrucciones de bytecode de la JVM (~200 opcodes), independiente de cualquier conjunto de instrucciones de CPU nativo |
| Verificador de bytecode | La JVM verifica la estructura del archivo `.class` y la seguridad de tipos antes de la ejecución, rechazando archivos malformados o manipulados |
| Descompilación | Puede desensamblarse con `javap -c` (integrado en el JDK) o descompilarse de nuevo a código fuente Java con herramientas como JD-GUI o CFR |
| Empaquetado | Normalmente se distribuye empaquetado dentro de archivos `.jar` (contenedores basados en ZIP que contienen múltiples archivos `.class` y un manifiesto) |
| Incompatibilidad con Android | Android no ejecuta archivos `.class` directamente; la herramienta `d8` los convierte a bytecode `.dex` para el Android Runtime (ART) |
| Lanzado | 1995-1996 (Java 1.0) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | docs.oracle.com |
Conversiones de CLASS
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos CLASS.