1, a bandeira de acesso
(1) conceito
Imediatamente após a constante associação de dois bytes, uma interface para identificar uma hierarquia de classes ou informações de acesso, incluindo a classe ou interface para estar cansado, se o tipo de público, tipo abstrato, classe é declarada final e afins
tabela de bandeira (2) de acesso:
Nome Bandeira Valor Significado ACC_PUBLIC 0x0001 se o tipo de público ACC_FINAL 0x0010 se declarou final, a classe pode ser fornecido apenas ACC_SUPER 0x0020 invokespecial permitir o uso de novas instruções de bytecode semânticas, as instruções sobre a mudança semântica invokespecial no JDK 1.0.2,
para distinguir esta instrução que utiliza semântica, JDK 1.0 esta bandeira .2 compilado após a classe deve ser verdade ACC_INTERFACE 0x0200 logotipo que é uma interface ACC_ABSTRACT 0x0400 se o tipo abstrato, interface ou classe abstrata para ele, este sinalizador é verdade, a outra classe é falsa ACC_SYNTHETIC 0x1000 identifica a classe não é gerado pelo usuário código ACC_ANNOTATION 0x2000 identifica isto é um comentário ACC_ENUM 0x4000 logotipo que é uma enumeração
(3) as bandeiras de controlo de acesso:
Imediatamente após a parte constante piscina:
Combinado com a tabela acima, ele pode ser desenhado é modificado público ver o código fonte:
público classe Student { private String nome; privado idade Integer;
(4) Tipo de Índice, índice de interface e o índice de pai
A ordem de: Índice de Classe (u2), o índice de pai (u2) no conjunto de índices de interface (primeiro tipo de interface é contador u2 indica o índice de capacidade da tabela, isto é, implementa várias interfaces, implementado se sem qualquer interface, o valor é zero, este último não ocupam qualquer índice byte interface), arquivos de classe integradas para determinar a relação desta classe com três, se houver uma interface, vai estar por trás da interface.
fonte:
público classe mytest estende Tópico implementos Serializable, Comparável {
estrutura e predefinidos tabela especificação de máquina virtual propriedades (5): Propriedades
O campo estrutura de tabela:
Variáveis usado para descrever a interface ou declarado na classe, incluindo em nível de campo variáveis de nível de classe e variáveis de instância, mas não incluídos nas variáveis locais declaradas dentro do método, nome do campo, por favor, tipos porque o campo é definido não são fixos, portanto, apenas as constantes referências a piscina constante pode ser descrito.
Número Nome Tipo U2 access_flags um especificador de acesso (por exemplo:. Pública) U2 name_index . Um nome de índice (tais como: inc é) U2 descriptor_index 1 descritores (por exemplo :()) ----- inc é int pública. () U2 attributes_count 1. Attribute_info atributos attributes_count
folha de propriedades:
Número Nome Tipo U2 attribute_name_index um nome de atributo índice U4 attribute_length comprimento atributo 1 u1 Informação attribute_length não igual a 2 + 4 + 1, igual a u2 + u4 + u1 * 190 = 196
VM predefinidos atributos:
Nome do atributo Significado posição de uso
de código Código Método Java Tabela é compilado em instruções de bytecode
ConstantValue última piscina palavra-chave campo da lista constante definida
aulas Reprovados, métodos, campos de tabela é declarada como obsoleto e campo
exceções lançadas exceção Métodos Método
arquivo de classe EnclosingMethod somente quando uma classe é uma classe parcial ou uma classe pode ter o atributo anônima que identifica a classe onde método periférica
InnerClass lista arquivo de classe classe interna
números de linhas de código LineNumberTable atributo de código-fonte Java e instrução bytecode um relacionamento correspondência
Código LocalVariableTable atributos método lobo será descrita locais
atributo Código StackMapTable em JDK1.6 novos atributos para o novo tipo de verificar se as verificações verificador e variáveis locais e um método de destino de processamento operando na classe necessidade corresponde
classe Assinatura tabela de tabela de métodos, de campo para apoiar um método genérico no caso da assinatura
SourceFile nome do registros do arquivo fonte arquivo de classe
arquivo de classe SourceDebugExtension para armazenar informação adicional de depuração
Synthetic classes, métodos, tabelas, campos ou métodos de campo flag mesa para o compilador gera automaticamente de
assinaturas de classe LocalVariableTypeTable em vez de usar o descritor é descrever tipos de parâmetros genéricos é adicionado após a introdução da sintaxe genérica
tabela método RuntimeVisibleAnnotations classe, tabela de campos de suporte dinâmico anotações
tabela RuntimeInvisibleAnnotations, a tabela de método, tabela de campos para os quais a anotação não é visível quando a operação especificada
função RuntimeVisibleParameterAnnotation RuntimeVisibleAnnotations método tabela de atributos e semelhante, mas o objecto de papel é um método
método tabela RuntimeInvisibleParameterAnnotation RuntimeInvisibleAnnotations propriedades papel semelhante e o papel do objeto ao qual parâmetro do método
método AnnotationDefault padrão para gravar uma anotação de elemento com base em tabela
arquivos do tipo BootstrapMethods classe guia usados para armazenar instruções de referência eliminatórias invokeddynamic
O número de variáveis e métodos locais deep stack (6) Método
2, anormal
(1) da tabela excepção:
Nome Tipo Quantidade start_pc U2 1 end_pc U2 1 handle_pc U2 1 catch_pc U2 1
(2) Exemplo:
00 00 00 04 00 08 00 02 ------ 0 4 8 # 2
A manipulação de exceção é dividido em dois: jogar e tentar .... catch (bloco)
salto 0-4 linhas anormal para a linha XVII ... ...
resumo:
(1) profundidade da pilha e número:
Deep Stack: pilha
O número de variáveis locais: locals
(2) os parâmetros:
Dados que descrevem as classes: (3) Os metadados
(4) Nome da classe: não pode exceder 256