JAVA - KLASSENDATEIEN
Seminarvortrag von
Studierach Beatrix
1
Überblick
2
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Class-File
Programm
in Java
Programm
in anderer
Sprache
Programm
in Java
3
Compiler
Java
class
files
Compiler
Java
class
files
Compiler
Other
binary
format
Typen
1. PRIMITIVE TYPEN:
u1
...1 unsigned byte
u2
... 2 unsigned bytes
u4
... 4 unsigned bytes
u8
... 8 unsigned bytes
2. TABELLENNAME
4
Big Endian
Klassendatei - Struktur
5
ClassFile{
u4 magic;
Magic Number: 0xCAFEBABE
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool [constant_pool_count-1];
u2 access_flags
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attributte_info attributes[attributes_count];
}
Beispiele zur Version
JDK 1.0.2 unterstützt Klassendatei- Formate
der Versionen 45.0 bis 45.3
SDK 1.2 unterstützt Klassendatei- Formate der
Versionen 45.0 bis 46.0
Versionsnummer:
Major version no.
6
45.3
Minor version no.
Klassendatei - Struktur
7
ClassFile{
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool [constant_pool_count-1];
u2 access_flags
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields [fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attributte_info attributes[attributes_count];
}
Constant Pool
constant_pool
Entry #1
constant_pool
Entry #7
Tag: CONSTANT_Class
name_index: 7
Tag: CONSTANT_Utf8_info
length: 3
bytes: „Act“
this class
This_class: 1
8
Klassendatei - Struktur
9
ClassFile{
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool [constant_pool_count-1];
u2 access_flags
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
Access_flags
10
Flag Name
Bedeutung
Verwendung
ACC_PUBLIC
Zugriff ausserhalb des
Package möglich
Klasse, Interface
ACC_FINAL
Keine Unterklassen
erlaubt
Klasse
ACC_SUPER
Hat geerbte Methoden
Klasse, Interface
ACC_INTERFACE
Ist ein Interface
Interface
ACC_ABSTRACT
Ist Abstract und kann nicht Klasse, Interface
instanziert werden
Überblick
11
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Spezielle Strings
12
Fully qualified Names
Simple Names
Descriptors
Fully qualified names
Source Code:
–
Class File:
–
13
java.lang.Thread
java/lang/Thread
Simple names
Constant Pool Eintrag der auf die Methode
String toString() verweist:
–
Constant Pool Eintrag der auf das Feld
java.io.PrintStram out verweist:
–
14
„toString“
„out“
Descriptors
FieldDescriptor:
FieldType
ComponentType:
FieldType
FieldType:
BaseType
ObjectType
ArrayType
BaseType:
B
C
D
F
I
J
S
Z
15
ObjectType:
L<classname>
ArrayType:
[ ComponentType
MethodDesciptor:
( ParameterDesciptor * ) ReturnDesciptor
ObjectType
ArrayType
ParameterDesciptor:
FieldType
ReturnDesciptor:
FieldType
V
Beispiele - Field Desciptor
int i;
long [][] windingRoad;
java.lang.Object[] stuff
16
I
[[J
[Ljava/lang/Object
Beispiel – MethodDescriptor
int getSize;
()I
void main(String [] args);
([Ljava/lang/String;)V
boolean regionMatches(boolean ignoreCase,
int toOffset, String other, int offset, int len);
(ZILjava/lang/Srting;II)Z
17
Überblick
18
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Constant Pool
– Allgemeines Format
cp_ info {
u1 tag;
u1 info[];
}
tag – Indikator für Typ des Eintrags
info – Inhalt variert mit Wert des Tags
19
Constant Pool - Tag
20
CONSTANT_Class
CONSTANT_Fieldref
CONSTANT_Methodref
CONSTANT_InterfaceMethodref
CONSTANT_String
CONSTANT_Integer
CONSTANT_Float
CONSTANT_Long
CONSTANT_Double
CONSTANT_NameAndType
CONSTANT_Utf8
Constant_Class
CONSTANT_Class_info{
U1 tag;
U2 name_index;
}
21
CONSTANT_NameAndType
CONSTANT_NameAndType_info{
U1 tag;
U2 name_index;
U2 desciptor_index;
}
22
CONSTANT_UTF8
CONSTANT_utf8_info{
U1 tag;
U2 length;
U2 bytes[length];
}
23
Überblick
24
Klassendatei
Spezielle Strings
Constant Pool
Attribute
Attribute
25
Code
ConstantValue
Deprecated
Exceptions
InnerClasses
LineNumberTable
LocalVariableTable
SourceFile
Synthetic
ConstantValue
ConstantValue_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 constantvalue_index;
}
26
Code
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_ length]
u2 exception table_length;
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count]:
}
27
LocalVariableTable
LocalVariableTable _attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 local_variable_table_length;
{ u2 start_pc;
u2 length;
u2 name_index;
u2 name_index;
u2 descriptor_index;
u2 index;
} local_variable_table[local_variable_table_length]:
}
28
Danke für Ihre Aufmerksamkeit!
29