1, la bandera de acceso
(1) concepto
Inmediatamente después de la piscina constante de dos bytes, una interfaz para la identificación de una jerarquía de clases o la información de acceso, incluyendo la clase o interfaz a estar cansado, si el tipo de público, tipo abstracto, clase se declara final y similares
Tabla de banderines (2) Acceso:
Nombre Valor Bandera Bandera Significado ACC_PUBLIC 0x0001 si el tipo de público ACC_FINAL 0x0010 tanto si se declara final, sólo las clases se pueden establecer ACC_SUPER 0x0020 si se debe permitir el uso de instrucciones de código de bytes invokespecial nueva semántica, instrucciones invokespecial semánticas había cambiado en el JDK 1.0.2,
con el fin de distinguir el uso de la semántica, que esta instrucción, JDK 1.0 esta bandera después .2 clases compiladas se debe ser cierto ACC_INTERFACE 0x0200 logo que es una interfaz ACC_ABSTRACT 0x0400 si el tipo abstracto, interfaz o clase abstracta para ello, esta bandera es verdadera, la otra clase es falsa ACC_SYNTHETIC 0x1000 identifica el código de clase no es generado por el usuario ACC_ANNOTATION 0x2000 identifica esto es un comentario ACC_ENUM logotipo de 0x4000, que es una enumeración
(3) banderas de control de acceso:
Inmediatamente después de la parte de la piscina constante:
En combinación con la tabla anterior, se puede extraer es modificado público para ver el código fuente:
público de clase Estudiante { privado String nombre; privada edad Integer;
(4) Tipo de índice, índice de interfaz y el índice de matriz
El orden de: Índice Class (u2), el índice de matriz (u2) en el conjunto de índice de interfaz (primer tipo de interfaz es contador u2 indica el índice de capacidad de la mesa, es decir, implementos varias interfaces, si se aplica sin ninguna interfaz, el valor es cero, este último no ocupan ningún byte índice de interfaz), los archivos de clases integradas para determinar la relación de esta clase con tres, si hay una interfaz, estará detrás de la interfaz.
fuente:
público de clase mytest extiende rosca implementos Serializable, Comparable {
(5) Propiedades de máquina virtual tabla de especificación de la estructura y predefinidos propiedades:
estructura de la tabla de campo:
Las variables utilizadas para describir la interfaz o declaradas en la clase, incluyendo las variables de nivel de clase a nivel de campo y variables de instancia, pero no se incluyen en las variables locales declaradas dentro del método, nombre del campo, por favor, tipos por qué el campo se define no son fijas, por lo que sólo las constantes referencias a la piscina constante se pueden describir.
Número Nombre Tipo access_flags U2 . 1 especificador de acceso (por ejemplo: público) U2 name_index . 1 nombre de índice (tales como: inc es) U2 descriptor_index . 1 descriptores (por ejemplo :()) ----- inc se int público () U2 attributes_count 1. attribute_info Atributos attributes_count
hoja de propiedades:
Número Nombre Tipo attribute_name_index U2 un nombre de atributo índice u4 attribute_length longitud atributo 1 u1 info attribute_length no es igual a 2 + 4 + 1, es igual a u2 + U4 + u1 * 190 = 196
VM predefinido atributos:
Nombre Ubicación Uso Significado
Código Código método de la tabla de Java se compila en instrucciones de código de bytes
ConstantValue campo mesa final palabras clave definidas piscina constante
clases desaprobadas, métodos, mesa campos se declara como obsoletos y los campos de
Excepciones Excepciones arrojados Métodos Método
archivo de clase EnclosingMethod sólo cuando una clase es una clase local o anónimo es una clase con el fin de tener esta propiedad, que se utiliza para identificar la ubicación del método de clase periférica
InnerClass archivo de clase dentro de la lista de clases
Código LineNumberTable atributo correspondencia relación de los números de línea de código fuente de Java y la instrucción de código de bytes
Método atributo Código LocalVariableTable local se describirá lobo
atributo jdk1.6 Código StackMapTable en los nuevos atributos para el nuevo tipo de inspección y pruebas para comprobar las variables locales y un objetivo procesamiento de operandos en la necesidad de un método de coincidencias de clases
Firma tabla de métodos de clase, mesa de campo para el caso de mantenimiento de la firma método genérico
archivo de clase SourceFile registra el nombre del archivo de origen
SourceDebugExtension archivo de clase se utiliza para almacenar información adicional de depuración
tabla de métodos de clase sintética, método de la tabla de campo o campo compilador bandera generan automáticamente
firmas de clase LocalVariableTypeTable en lugar de utilizar el descriptor es describir un genérico tipos parametrizados se añade después de la introducción de la gramática genéricos
RuntimeVisibleAnnotations clases, métodos, mesas, mesa de campos proporciona soporte para la anotación dinámico
tabla RuntimeInvisibleAnnotations, la tabla de métodos, mesa de campo para indicar que las anotaciones son runtime invisible
tabla de métodos RuntimeVisibleParameterAnnotation con RuntimeVisibleAnnotations propiedades papel similar, pero el papel de los métodos de objeto
RuntimeInvisibleParameterAnnotation tabla de métodos de roles y RuntimeInvisibleAnnotations similares propiedades, actuando como un parámetro del método que es el objeto
AnnotationDefault método de anotación por defecto para la grabación de una serie de elementos de tierras mesa
BootstrapMethods guían camino para el almacenamiento de archivos de clase de instrucciones hace referencia calificador invokeddynamic
El número de variables y métodos locales pila profunda (6) Método
2, anormal
(1) Tabla de excepción:
Número Tipo Nombre start_pc u2 1 end_pc u2 1 handle_pc u2 1 catch_pc u2 1
(2) Ejemplo:
00 00 00 04 00 08 00 02 ------ 0 4 8 # 2
El manejo de excepciones se divide en dos: lanzar y tratar .... retén (bloque)
salto 0-4 filas anormal a la línea XVII ... ...
resumen:
(1) profundidad de la pila y número:
Deep Stack: pila
El número de variables locales: locales
(2) parámetros:
Los datos que describen las clases: (3) Metadatos
(4) Nombre de clase: no puede exceder 256