O que é o formato de ficheiro CLASS?
Um arquivo .class contém código-fonte compilado escrito na linguagem de programação Java. Arquivos .class são gerados pelo compilador Java a partir de arquivos fonte .java que definem uma ou mais classes. Cada arquivo .class é o resultado de uma compilação bem-sucedida e contém bytecode - uma representação binária de uma classe que é executada pela Java Virtual Machine (JVM).
Arquivos .class são gerados automaticamente durante a compilação de arquivos fonte .java. Como o bytecode é independente de plataforma, o mesmo arquivo .class é executado em qualquer sistema operacional que tenha uma JVM compatível instalada. Um único arquivo fonte .java pode conter uma ou mais classes, e cada classe recebe seu próprio arquivo .class durante o processo de compilação.
A compilação de arquivos .java em arquivos .class é realizada usando o comando javac incluído no Java Development Kit (JDK). A maioria dos ambientes de programação Java - incluindo IDEs como IntelliJ IDEA e Eclipse - compila arquivos .class automaticamente conforme os programadores escrevem o código.
O Java Runtime Environment (JRE) suporta a execução de arquivos .class via comando java, mas não permite a compilação, já que o JRE não inclui o compilador javac.
Todo arquivo .class começa com o número mágico de 4 bytes 0xCAFEBABE, seguido pelos campos de versão minor e major que identificam a versão do Java usada para compilá-lo. Múltiplos arquivos .class são comumente empacotados juntos em um arquivo JAR para distribuição e implantação.
Como a JVM está disponível em muitas versões, deve-se ter em mente que nem todos os arquivos .class são compatíveis com todas as versões do runtime. Um arquivo compilado visando uma versão major do Java mais recente não pode ser carregado por uma JVM mais antiga.
Segurança e proteção
RISCO: MEDIUMUm arquivo .class é código compilado: se você o executar («java MyClass») com uma JVM, ele será executado com as permissões do seu usuário, portanto, uma classe desconhecida - como um JAR ou EXE desconhecido - pode conter malware. Trate o Java compilado baixado como não confiável: execute apenas classes de fontes em que você confia. Apenas descompilar ou desmontar um .class (JD-GUI, javap) não o executa e é seguro. Esteja ciente de que o bytecode revela a lógica de um programa, portanto, qualquer coisa que você compilar pode ser descompilada por outros, a menos que seja ofuscada.
Detalhes do formato
em resumoProgramas que abrem arquivos CLASS
Detalhes técnicos
especificação profunda| Tipo de formato | Bytecode Java compilado (binário) |
| Tipo MIME | application/java-vm |
| Bytes mágicos | 0xCAFEBABE (4 bytes no deslocamento 0) - presente em todo arquivo .class válido |
| Codificação de versão | Bytes 6-7 (versão major) identificam a versão de lançamento do Java; ex: 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Ambiente de execução | Java Virtual Machine (JVM) via comando `java` |
| Ferramenta de compilação | Compilador `javac`, incluído no Java Development Kit (JDK) |
| Independência de plataforma | O bytecode é neutro em relação à arquitetura da CPU e roda em qualquer SO com uma JVM compatível |
| Uma classe por arquivo | Cada classe de nível superior ou classe aninhada estática é compilada em seu próprio arquivo `.class` separado |
| Nomenclatura de classes internas | Classes internas e anônimas produzem arquivos adicionais com `$` no nome (ex: `Outer$Inner.class`) |
| Pool de constantes | Cada arquivo incorpora uma tabela estruturada de pool de constantes que contém literais de string, nomes de classes e descritores de campos/métodos |
| Conjunto de instruções | Usa o conjunto de instruções de bytecode da JVM (~200 opcodes), independente de qualquer conjunto de instruções de CPU nativa |
| Verificador de bytecode | A JVM verifica a estrutura do arquivo `.class` e a segurança de tipos antes da execução, rejeitando arquivos malformados ou adulterados |
| Descompilação | Pode ser desmontado com `javap -c` (nativo do JDK) ou descompilado de volta para o código-fonte Java com ferramentas como JD-GUI ou CFR |
| Empacotamento | Geralmente distribuído empacotado dentro de arquivos `.jar` (contêineres baseados em ZIP que contêm múltiplos arquivos `.class` e um manifesto) |
| Incompatibilidade com Android | O Android não executa arquivos `.class` diretamente; a ferramenta `d8` os converte em bytecode `.dex` para o Android Runtime (ART) |
| Lançado | 1995-1996 (Java 1.0) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | docs.oracle.com |
Conversões de CLASS
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos CLASS.