ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java
ΠΡΠ±ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ², ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠ°ΠΊ max_stack, ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² long ΠΈ double Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π΄Π²Π΅ ΡΡΠ΅ΠΉΠΊΠΈ ΡΡΠ΅ΠΊΠ° (8 Π±Π°ΠΉΡ), Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ — ΠΎΠ΄Π½Ρ (4 Π±Π°ΠΉΡΠ°). ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² char, boolean, byte, short ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΡΠ΅Ρ Π±Π°ΠΉΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅. Π’ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅ΠΌ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
- Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅. 1
- Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅. 2
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
.
3- ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ. 4
- Π€ΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ°. 5
- Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ°. 5
- Π’ΠΈΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Constant_pool 6
- Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ field_info 7
- Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ method_info 7
- Π€ΠΎΡΠΌΠ°Ρ Π°ΡΡΠΈΠ±ΡΡΠ° Code. 8
- Π Π°Π±ΠΎΡΠ° JVM 10
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄ JVM. 12
- Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java (ΡΠ·ΡΠΊΠ° JASM). 14
- Π’Π΅ΡΡΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ. 18
- 1. 18
- 2. 19
- 3. 20
- ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. 25
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
.
30- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ°. 31
Π―Π·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ 90-Ρ Π³ΠΎΠ΄ΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ·ΡΠΊΠ° Oak, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π²ΡΠ΅Π³ΠΎΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ «ΠΏΡΠΎΡΠΈΠ²ΠΎΠΊ» Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ°, ΡΠ·ΡΠΊ Java ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΈΡΠΎΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠ°ΠΊ ΡΠ·ΡΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΠΉΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π»Ρ ΡΠ΅ΡΠΈ ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Java Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΠ»Π°ΡΡ, ΠΈ ΡΡΠΎΡ ΡΠ·ΡΠΊ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ. ΠΡΠΎ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΠΊΠ°ΠΊ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Java ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π½Π΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, Π° Π², ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ, Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ Java (JVM). ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ JVM Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Ρ Π΅Π΅ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° C/C++. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Java, Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΡΠΎΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ JVM, ΠΊΠ°ΠΊ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Sun Π² ΠΎΡΠΊΡΡΡΡΠΉ Π΄ΠΎΡΡΡΠΏ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ JVM Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΡΠ°ΠΊ ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ Java. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠΉ Java, ΠΏΠΎΡΡΠΈ Π½Π΅ ΡΠ΄Π΅Π»ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ JVM ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π»ΠΈΡΡ ΡΠ°ΠΌ ΡΠ·ΡΠΊ Java. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π·Π½Π°Π½ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π±ΡΠ²Π°Π΅Ρ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΎΠ·Π΄Π°Π» ΡΡΠ΅Π±Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ JVM — Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Java.
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ.
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΡΡΠΎΠ²Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java, ΡΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ° Java, ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ JVM. ΠΠ°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Java ΠΈ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ JVM.
Π€ΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Java ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² The JavaTM Virtual Machine Specification, ΠΈΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Sun. Π€Π°ΠΉΠ» Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅Π΅ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²) ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅.class.
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ°.
Π€Π°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ:
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];
}
(Π·Π΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅ u1, u2, u4 — ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 8, 16 ΠΈ 32 Π±ΠΈΡ Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ Π±Π°ΠΉΡΠΎΠ² ΡΡΠ°ΡΡΠΈΠΉ Π±Π°ΠΉΡ ΠΏΠΎ ΠΌΠ»Π°Π΄ΡΠ΅ΠΌΡ Π°Π΄ΡΠ΅ΡΡ). Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ.
Β· magic — ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΈΠΌΠ΅ΡΡΠ΅Π΅ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΈΠ΄ 0xCAFEBABE;
Β· minor_version, major_version — Π²Π΅ΡΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠ°ΠΉΠ»Π°, ΠΏΠΎ Π½Π΅ΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ JVM;
Β· constant_pool_count — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Constant_pool ΠΏΠ»ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°;
Β· constant_pool — ΠΎΠ±Π»Π°ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ — ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ±Π»Π°ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ (ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΅Π΄ΠΈΠ½ΠΈΡΡ; ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π° ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΈΡΠ»Π° ΡΠΈΠΏΠΎΠ² long ΠΈ double, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ). Π€ΠΎΡΠΌΠ°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄ΠΎΠ² Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π½ΠΈΠΆΠ΅;
Β· access_flags — ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π±ΠΈΡΠΎΠ²ΡΡ ΡΠ»Π°Π³ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΊΠ»Π°ΡΡΠ°:
Π€Π»Π°Π³ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΌΡΡΠ» | |
ACC_PUBLIC | 0x0001 | ΠΠΎΡΡΡΠΏΠ΅Π½ ΠΈΠ·-Π·Π° ΠΏΡΠ΅Π΄Π΅Π»ΠΎΠ² ΠΏΠ°ΠΊΠ΅ΡΠ° | |
ACC_FINAL | 0x0010 | ΠΠ°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° | |
ACC_SUPER | 0x0020 | Π ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΡΡΡ Π² Java2 ΡΡΠ°ΠΊΡΠΎΠ²ΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ invokespecial | |
ACC_INTERFACE | 0x0200 | ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°) | |
ACC_ABSTRACT | 0x0400 | ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ | |
Β· this_class, super_class — ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΡΡΡΠΊΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈ Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡ-ΠΏΡΠ΅Π΄ΠΎΠΊ;
Β· interfaces_count — ΡΠΈΡΠ»ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ;
Β· interfaces — ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΡΡΡΡΠΊΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ;
Β· fields_count — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅;
Β· fields — ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ field_info, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ°. Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ field_info Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π½ΠΈΠΆΠ΅;
Β· methods_count — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²;
Β· methods — ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ method_info, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°. Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ mettho_info Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π½ΠΈΠΆΠ΅. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ;
Β· attributes_count — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ°;
Β· attributes — ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ-Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° (ΠΏΠΎΠ»Ρ, ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Π°ΡΡΠΈΠ±ΡΡΡ). ΠΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΠΊΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π² Π½Π°ΡΠ°Π»Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Ρ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΡΠΈΠΏ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΈ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ. Π ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ: SourceFile — ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ°, ΠΈ Deprecated — ΠΊΠ»Π°ΡΡ ΠΎΡΡΠ°Π²Π»Π΅Π½ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΡΠΎ ΡΡΠ°ΡΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΡΠ΅Π΄ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π’ΠΈΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Constant_pool
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρonstant_pool Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΡΠΈΠΏ. Π Π°Π·ΠΌΠ΅Ρ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΡΡΠΊΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΏΠ°. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ (ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² constant_pool):
Β· CONSTANT_Class — ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΊΠ»Π°ΡΡ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠΈΠΏΠ° CONSTANT_Utf8, Ρ ΡΠ°Π½ΡΡΠ΅ΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠ»Π°ΡΡΠ°;
Β· CONSTANT _Fieldref — ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠΎΠ»Π΅ ΠΊΠ»Π°ΡΡΠ°. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠΈΠΏΠ° CONSTANT_Class ΠΈ CONSTANT_NameAndType;
Β· CONSTANT _Methodref ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° (Π½Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°). Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠΈΠΏΠ° CONSTANT_Class ΠΈ CONSTANT_NameAndType;
Β· CONSTANT _InterfaceMethodref ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠΈΠΏΠ° CONSTANT_Class ΠΈ CONSTANT_NameAndType;
Β· CONSTANT_String — ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠΈΠΏΠ° CONSTANT_Utf8;
Β· CONSTANT_Integer — ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π»ΠΎΠ΅ 32-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ;
Β· CONSTANT_Float — ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ;
Β· CONSTANT_Long — ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π»ΠΎΠ΅ 64-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ;
Β· CONSTANT_Double — ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ;
Β· CONSTANT_NameAndType — ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΈ ΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π»ΠΈΠ±ΠΎ ΡΠΈΠΏ ΠΈ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π΄Π²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠΈΠΏΠ° CONSTANT_Utf8, Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠΌΡ ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΈΠΏΠ° (ΡΠΈΠ³Π½Π°ΡΡΡΡ);
Β· CONSTANT_Utf8 — ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Utf8 (ΡΠΈΠΌΠ²ΠΎΠ»Ρ Unicode ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠΌΠΈ ΠΎΡ 1 Π΄ΠΎ 3-Ρ Π±Π°ΠΉΡ, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Ρ ΠΊΠΎΠ΄Π°ΠΌΠΈ, Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠΌΠΈ 127, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡΠΎΠΌ).
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ — ΡΡΠΎ ΡΡΡΠΎΠΊΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΠΈΠΏΡ ΠΈ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅. ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ, ΡΠΈΠΏΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² — ΠΎΡΠΊΡΡΠ²Π°ΡΡΠΈΠΌΠΈ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ Π² ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅, ΡΠ°Π²Π½ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ»Π°ΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΠΏΡΡΠ΅ΠΌ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΠΊΠΈ ΡΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»ΡΡ. Π Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°Ρ ΡΠΈΠ³Π½Π°ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ Π±Π΅Π· ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²; ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉ ΡΠΊΠΎΠ±ΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΈΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π±ΡΠΊΠ²Π° L, Π° ΠΏΠΎΡΠ»Π΅ Π½ΠΈΡ — ΡΠΎΡΠΊΠ° Ρ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, (ILjava/lang/Object;)I — (int, Object):int (Π±ΡΠΊΠ²ΠΎΠΉ I ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΏ int).
Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ field_info
Π‘ΡΡΡΠΊΡΡΡΠ° field_info ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
ΠΠ΄Π΅ΡΡ:
Β· access_flags — ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π±ΠΈΡΠΎΠ²ΡΡ ΡΠ»Π°Π³ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡ ΠΈΠΊΠΈ ΠΏΠΎΠ»Ρ:
ΠΠΌΡ ΡΠ»Π°Π³Π° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΌΡΡΠ» | |
ACC_PUBLIC | 0x0001 | ΠΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ public | |
ACC_PRIVATE | 0x0002 | ΠΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ private | |
ACC_PROTECTED | 0x0004 | ΠΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ protected | |
ACC_STATIC | 0x0008 | ΠΠΎΠ»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ | |
ACC_FINAL | 0x0010 | ΠΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ final ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ | |
ACC_VOLATILE | 0x0040 | ΠΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ volatile | |
ACC_TRANSIENT | 0x0080 | ΠΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ transient — Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡ ΠΏΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ | |
Β· name_index — ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ-ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»Ρ Π² Constant Pool;
Β· descriptor_index — ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΠΎΠ»Ρ (ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΈΠΏ) Π² Constant Pool;
Β· attributes_count — ΡΠΈΡΠ»ΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎΠ»Ρ;
Β· attributes — Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠΎΠ»Ρ. Π ΠΏΠΎΠ»ΡΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Deprecated (ΡΠΌ. Π²ΡΡΠ΅), Synthetic (ΠΏΠΎΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΡΠ²Π½ΠΎ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅) ΠΈ ConstantValue (ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ).
Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΡΠΊΡΡΡΡ method_info
Π‘ΡΡΡΠΊΡΡΡΠ° method_info ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
method_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
ΠΠ΄Π΅ΡΡ:
Β· access_flags — Π±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠ»Π°Π³ΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°:
Flag Name | Value | Interpretation | |
ACC_PUBLIC | 0x0001 | ΠΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ public | |
ACC_PRIVATE | 0x0002 | ΠΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ private | |
ACC_PROTECTED | 0x0004 | ΠΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ protected | |
ACC_STATIC | 0x0008 | ΠΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ | |
ACC_FINAL | 0x0010 | ΠΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ΅Π½ | |
ACC_SYNCHRONIZED | 0x0020 | ΠΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ synchronized | |
ACC_NATIVE | 0x0100 | ΠΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ «ΡΠΎΠ΄Π½ΡΠΌ» ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ | |
ACC_ABSTRACT | 0x0400 | ΠΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ | |
ACC_STRICT | 0x0800 | Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ «ΡΡΡΠΎΠ³ΠΈΠΉ» ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ (ΡΠΎΠ»ΡΠΊΠΎ Π² Java 2). | |
Β· name_index, descriptor_index, attributes_count — Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ field_info;
Β· attributes — Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ:
o Deprecated, Synthetic — Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ ΠΏΠΎΠ»Π΅ΠΉ;
o Exceptions — ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄. ΠΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ;
o Code — ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π€ΠΎΡΠΌΠ°Ρ Π°ΡΡΠΈΠ±ΡΡΠ° Code.
ΠΡΡΠΈΠ±ΡΡ 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];
}
ΠΠ΄Π΅ΡΡ:
Β· attribute_name_index, attribute_length — ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΠΎΠ»Ρ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ Π΅Π³ΠΎ ΡΠΈΠΏ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ;
Β· max_stack — ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π°;
Β· max_locals — ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° (Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ);
Β· code_length — ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π² Π±Π°ΠΉΡΠ°Ρ ;
Β· code — ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π±Π°ΠΉΡ-ΠΊΠΎΠ΄;
Β· exception_table_length — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ²;
Β· exception_table — ΡΠ°Π±Π»ΠΈΡΠ° Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ² (ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ). ΠΠ°ΠΆΠ΄Π°Ρ Π΅Π΅ Π·Π°ΠΏΠΈΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»Ρ:
o start_pc — ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°ΡΠ°Π»Π° Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°,
o end_pc — ΠΈΠ½Π΄Π΅ΠΊΡ ΠΊΠΎΠ½ΡΠ° Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°,
o handler_pc — ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°ΡΠ°Π»Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°,
o catch_type — ΡΠΈΠΏ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΠΈΠ½Π΄Π΅ΠΊΡ Π² Constant Pool) ΠΈΠ»ΠΈ 0 Π΄Π»Ρ Π±Π»ΠΎΠΊΠ° try … finally;
Β· attributes_count — ΡΠΈΡΠ»ΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²;
Β· attributes — Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ LineNumberTable ΠΈ LocalVariableTable, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
Π Π°Π±ΠΎΡΠ° JVM
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ JVM Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, Ρ ΠΌΠ΅ΡΠΎΠ΄Π° main ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΠ°ΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ½Π°ΡΠ°Π»Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ. ΠΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ. ΠΡΠΎΡΠ΅ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ»Π°ΡΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ°ΠΏΠΎΠ²:
Β· ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ° (loading). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° ClassLoader ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΠΉΠ»Π°;
Β· ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ (linking). Π‘ΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΡΠ°Π΄ΠΈΠΉ:
o ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° (verification) Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ² Π½Π° ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ),
o ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° (preparation) — Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ»Π°ΡΡΠ° ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΡ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ,
o ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ (resolution) ;
Β· ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (initialization) ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΊΠ»Π°ΡΡΠ΅.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ JVM, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠΉ — ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ ΠΈΠΌ ΠΌΠΎΠ³ΡΡ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΊΠ²Π°Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅. JVM ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΄ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Π·Π°ΡΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΆΠ½Π΅ΠΉΡΠΈΠΌ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (locks), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄ JVM. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ Π½ΠΈΠΌ «Π·Π°ΠΌΠΎΠΊ» (lock). ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² «Π·Π°ΠΊΡΡΠ»» ΡΡΠΎΡ «Π·Π°ΠΌΠΎΠΊ», ΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π΅Π³ΠΎ «Π·Π°ΠΊΡΡΡΡ» Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΅Π³ΠΎ Π½Π΅ «ΠΎΡΠΊΡΠΎΠ΅Ρ».
JVM ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅:
Β· ΡΠ΅Π³ΠΈΡΡΡ PC (program counter), ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡ PC;
Β· ΡΡΠ΅ΠΊ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΊ. ΠΡΠΈ Π²Ρ ΠΎΠ΄Π΅ Π² ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ΅ΠΉΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΡΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². Π Π°Π·ΠΌΠ΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠΌΠΈ max_locals ΠΈ max_stack Π°ΡΡΠΈΠ±ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° Code;
Β· ΠΊΡΡΠ° — ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ. ΠΠ°ΠΌΡΡΡ ΠΈΠ·-ΠΏΠΎΠ΄ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Ρ ΡΡΡΠ»ΠΎΠΊ) Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°;
Β· ΠΎΠ±Π»Π°ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π Π½Π΅Π΅ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°Π·Π»ΠΈΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΈ ΠΏΠΎΠ»ΡΡ . ΠΠ±Π»Π°ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ constant pool ΠΈΠ· Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²;
Β· ΡΡΠ΅ΠΊΠΈ Π΄Π»Ρ native-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ Π² ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ JVM.
JVM ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΊΠΎΠ²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ JVM Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
Β· ΡΡΠΈΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π΅Π³ΠΎ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°,
Β· ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅,
Β· Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°Π΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π²Π·ΡΡΡΠΌΠΈ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°, ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π΅ΡΡΡ) Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°,
Β· Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° PC Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΡ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°.
ΠΡΠ±ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ², ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠ°ΠΊ max_stack, ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² long ΠΈ double Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π΄Π²Π΅ ΡΡΠ΅ΠΉΠΊΠΈ ΡΡΠ΅ΠΊΠ° (8 Π±Π°ΠΉΡ), Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ — ΠΎΠ΄Π½Ρ (4 Π±Π°ΠΉΡΠ°). ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² char, boolean, byte, short ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΡΠ΅Ρ Π±Π°ΠΉΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅. Π’ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² JVM Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ ΡΠΈΠΏΠ° int, Π΄Π»Ρ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΡΠ»Π΅Π²ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π»ΠΆΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΡΠΈΠ½Π΅ — Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΅Π΄ΠΈΠ½ΠΈΡΠ°). ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠΈΠΏΠ° boolean[] Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°ΠΉΡ-ΠΊΠΎΠ΄: ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅, Π³Π»ΡΠ±ΠΈΠ½Π° ΡΡΠ΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΈΠΏ Π²Π΅ΡΡ Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΌΡ ΡΠΈΠΏΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
Π ΠΎΠ±Π»Π°ΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°, Π° Π² ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠ΅ΡΠ²ΡΡ (Π½ΡΠ»Π΅Π²ΡΡ) ΠΏΠΎΠ·ΠΈΡΠΈΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠ»ΠΊΠ° this Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (Π΄Π°ΠΆΠ΅ ΡΡΡΠ»ΠΊΠΎΠΉ this) ΠΈ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΡΡΠ΅ΠΊΠ΅, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° long ΠΈ double Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π΄Π²Π΅ ΡΠ΅ΡΡΡΠ΅Ρ Π±Π°ΠΉΡΠ½ΡΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΌΠ΅Π½Π΅Π΅ 32-Ρ ΡΠ°Π·ΡΡΠ΄ΠΎΠ² ΡΠ°ΡΡΠΈΡΡΡΡΡΡ Π΄ΠΎ ΡΠ΅ΡΡΡΠ΅Ρ Π±Π°ΠΉΡ. Π ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ: Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΠΈΠΏΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΌ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ, Π²ΠΎ-Π²ΡΠΎΡΡΡ , Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎ Π΅Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ).
ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π΅Π³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°; ΠΎΠ½ΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π°, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΡ void, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°.
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ athrow ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°) Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΡΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅, Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈ Ρ. Π΄. ΠΡΠ»ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°ΠΉΠ΄Π΅Π½, ΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΠΎΡΠΊΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»Π΅ΠΌ handler_pc ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ exception_table Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ Code ΠΌΠ΅ΡΠΎΠ΄Π°. Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. ΠΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ Throwable ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΡ Π½Π΅Π³ΠΎ.
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄ JVM.
ΠΠ΅ΡΠ²ΡΠΉ Π±Π°ΠΉΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JVM ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄:
Β· ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ,
Β· ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ,
Β· ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π΄Π²ΡΡ Π±Π°ΠΉΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ,
Β· ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π΄Π²ΡΡ Π±Π°ΠΉΡΠ½ΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°,
Β· ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΡΠ΅ΡΡΡΠ΅Ρ Π±Π°ΠΉΡΠ½ΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°.
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΡ, ΡΡΠ΅Π΄ΠΈ Π½ΠΈΡ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° — tableswitch ΠΈ lookupswitch. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ wide, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π·Π°ΠΌΠ΅Π½ΡΡ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π²ΡΡ Π±Π°ΠΉΡΠ½ΡΠΌ. Π The Java Virtual Machine Specification Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ²ΠΎΠ΅ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΡΠΏΠΏ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ iload, lload, aload, fload, dload Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΠΉ, Π½ΠΎ ΠΎΠ½ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°. ΠΡΠΈΠ½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Β· i — int (ΡΠ°ΠΊΠΆΠ΅ byte, short, char ΠΈ boolean),
Β· l — long,
Β· f — float,
Β· d — double,
Β· a — ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ².
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ char, byte ΠΈ short.
ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΡΡΠΏΠΏ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ:
o ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΡΡΠ΅ΠΊ: iload, iload_<n>, lload, lload_<n>, fload, fload_<n>, dload, dload_<n>, aload, aload_<n>;
o Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: istore, istore_, lstore, lstore_, fstore, fstore_, dstore, dstore_, astore, astore_;
o ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π½Π° ΡΡΠ΅ΠΊ: istore, istore_, lstore, lstore_, fstore, fstore_, dstore, dstore_, astore, astore_;
Β· Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
o ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: iadd, ladd, fadd, dadd;
o Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅: isub, lsub, fsub, dsub;
o ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅: imul, lmul, fmul, dmul;
o Π΄Π΅Π»Π΅Π½ΠΈΠ΅: idiv, ldiv, fdiv, ddiv;
o ΠΎΡΡΠ°ΡΠΎΠΊ: irem, lrem, frem, drem;
o ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠ°: ineg, lneg, fneg, dneg;
o ΡΠ΄Π²ΠΈΠ³ΠΈ ΠΈ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ior, lor, iand, land, ixor, lxor, ishl, ishr, iushr, lshl, lshr, lush;
o ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅: dcmpg, dcmpl, fcmpg, fcmpl, lcmg;
o ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: iinc.
ΠΡΠ΅ ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ iinc, Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ½ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. ΠΠΎΠΌΠ°Π½Π΄Π° iinc ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° — ΠΈΠ½Π΄Π΅ΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²:
o ΡΠ°ΡΡΠΈΡΡΡΡΠ΅Π΅: i2l, i2f, i2d, l2f, l2d, f2d;
o ΡΡΠΆΠ°ΡΡΠ΅Π΅: i2b, i2c, i2s, l2i, f2i, f2l, d2i, d2l, d2f;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ:
o ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°: new;
o ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°: newarray (ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°), anewarray (ΡΡΡΠ»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°), multianewarray(ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ);
o Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠΌ: getfield, putfield (Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°), getstatic, putstatic (Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ);
o Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° ΡΡΠ΅ΠΊ: baload (ΡΠΈΠΏ byte), caload (ΡΠΈΠΏ char), saload (ΡΠΈΠΏ short), iaload, laload, faload, daload, aaload;
o ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°: bastore, castore, sastore, iastore, lastore, fastore, dastore, aastore;
o ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°: arraylength;
o ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ²: instanceof (Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΠΈ checkcast (Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΈΠΏΠ° ΡΡΡΠ»ΠΊΠΈ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΌΡ ΡΠΈΠΏΡ);
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ²:
o pop — ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠ΅ΠΊΠ°;
o pop2 — ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π²Π΅ΡΡ Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅ΠΊΠ°;
o dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2 — Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°;
o swap — ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π° ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π²ΡΡ Π²Π΅ΡΡ Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
o jsr, jsr_w, ret - Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π½ΠΈΡ . ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±Π»ΠΎΠΊΠ° finally;
o goto, goto_w — Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°: ifeq, iflt, ifle, ifne, ifgt, ifge, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmpgt, if_icmple, if_icmpge, if_acmpeq, if_acmpne;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
o invokevirtual - ΠΎΠ±ΡΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ;
o invokestatic - Π²ΡΠ·ΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°;
o invokeinterface — Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ;
o invokespecial - Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ·Π΄Π½Π΅Π³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠ° ΠΈ private-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π°:
o return — Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ΅Π³ΠΎ void;
o ireturn, lreturn, freturn, dreturn, areturn - Π²ΠΎΠ·Π²ΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ: athrow;
Β· ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ (ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ):
o monitorenter — ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (Π²ΠΎΠΉΡΠΈ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ);
o monitorexit — ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (Π²ΡΠΉΡΠΈ ΠΈΠ· ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ).
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java (ΡΠ·ΡΠΊΠ° JASM).
Π€Π°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java (ΡΠ·ΡΠΊΠ΅ JASM) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ», ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Ρ ΠΊΠΎΠ΄Π°ΠΌΠΈ 13 ΠΈ 10. ΠΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π»ΡΠ±ΡΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠΌΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π»ΠΎ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠ»Π°ΡΡΠ°, Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ .jasm Π»ΠΈΠ±ΠΎ .jsm. Π€Π°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΎΡΠΊΠΎΠΉ Ρ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ Ρ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ Π·Π½Π°ΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅Π½ΡΠ° ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ. Π’ΠΎΡΠΊΠΈ Ρ Π·Π°ΠΏΡΡΠΎΠΉ ΠΈ Π·Π½Π°ΠΊΠΈ ΠΏΡΠΎΡΠ΅Π½ΡΠ° Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Π΄Π²ΠΎΠΉΠ½ΡΠΌΠΈ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ²Π΅ ΠΈΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° Π΄Π²ΠΎΠΉΠ½Π°Ρ ΠΊΠ°Π²ΡΡΠΊΠ° Π² ΡΡΡΠΎΠΊΠ΅. ΠΡΠ±ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ², ΡΠ°Π±ΡΠ»ΡΡΠΈΠΉ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² ΡΡΡΠΎΠΊΠΈ ΠΈ Ρ. Π΄.) ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ±Π΅Π», Π΅ΡΠ»ΠΈ Ρ ΠΎΠ±Π΅ΠΈΡ ΡΡΠΎΡΠΎΠ½ ΠΎΡ Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΠΈΠ΄ΠΎΠ²: Π±ΡΠΊΠ²Ρ Π»Π°ΡΠΈΠ½ΡΠΊΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ°, ΡΠΈΡΡΡ, Π·Π½Π°ΠΊ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°Ρ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ . ΠΠ΅ΡΡ Π½ΠΈΠΉ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π±ΡΠΊΠ² Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°Ρ , ΠΈΠΌΠ΅Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄ΡΡΠ³ΠΈΡ Π»Π΅ΠΊΡΠ΅ΠΌΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ°Π΅ΡΡΡ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ°. Π€Π°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ:
[ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ_Π΄ΠΎΡΡΡΠΏΠ°] interface <οΏ½ΠΈΠΌΡ_ΠΊΠ»Π°ΡΡΠ°>;
[extends <οΏ½Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ>;]
[implements <οΏ½ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ1>, <οΏ½ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ2>, …, <οΏ½ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ_n>;]
[fields;
<οΏ½ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ_ΠΏΠΎΠ»Π΅ΠΉ>
]
[methods;
<οΏ½ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ_ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²>
]
ΠΠ΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ — Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ (ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΠΎΠΉ), Π² ΡΠ³Π»ΠΎΠ²ΡΠ΅ — Π½Π΅ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ_Π΄ΠΎΡΡΡΠΏΠ° — ΡΡΠΎ ΡΠ»ΠΎΠ²Π° public, final, abstract, super, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π°Π³Π°ΠΌ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ACC_PUBLIC, ACC_FINAL, ACC_ABSTRACT, ACC_STATIC. ΠΡΠΈ ΡΠ»Π°Π³ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ. ΠΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ°, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²). ΠΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π°Π³Π° ACC_INTERFACE, Π² Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ class, ΠΈΠ½Π°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ interface. ΠΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ (ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ). ΠΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ ΡΠΎΡΠΊΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, java.lang.String. Π Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ°ΠΌ, Π³Π΄Π΅ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» «@». ΠΡΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ (ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ extends ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ), ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ java.lang.Object. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ — ΠΏΡΠ΅Π΄ΠΊΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΠΊΡΠΈΠΈ implements.
ΠΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² — ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°: ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π±ΡΠΊΠ² Π»Π°ΡΠΈΠ½ΡΠΊΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ° Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° (ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅), Π·Π½Π°ΠΊΠΎΠ² ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΈΡΡ, ΠΏΡΠΈΡΠ΅ΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠΈΡΡΡ. ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° Java, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ² JVM. ΠΠ²Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
public abstract class some_package.SomeClass;
% ΡΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
extends
some_package.nested_package1.BaseClass;
implements % ΠΈ ΡΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
some_package.Interface1, some_package.nested_package2.Interface2;
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
[ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ_Π΄ΠΎΡΡΡΠΏΠ°] <οΏ½ΠΈΠΌΡ_ΠΏΠΎΠ»Ρ>:<οΏ½ΡΠΈΠΏ_ΠΏΠΎΠ»Ρ> [=<οΏ½Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅>];
ΠΠ΄Π΅ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ_Π΄ΠΎΡΡΡΠΏΠ° — ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»ΠΎΠ²Π°: public, protected, private, final, static, transient, volatile, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π°Π³Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΠ»Ρ ACC_PUBLIC, ACC_PROTECTED, ACC_PRIVATE, ACC_FINAL, ACC_STATIC, ACC_TRANSIENT, ACC_VOLATILE. ΠΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π½ΡΠΌ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡΠΌ ΡΠ»Π°Π³ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° (ΡΠΌ. The Java Virtual Machine Specification), Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΎΠ»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ public, static ΠΈ final. ΠΠΌΡ_ΠΏΠΎΠ»Ρ — ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. Π’ΠΈΠΏ_ΠΏΠΎΠ»Ρ — ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° Java — byte, short, int, long, char, float, double, boolean). ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΠΎ Ρ ΠΏΠΎΠ»Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ ConstantValue. ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΉ, Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Π° Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΡΠ΅Π», ΠΏΡΠΈΠ½ΡΡΠΎΠΌ Π² Java. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² Π°ΠΏΠΎΡΡΡΠΎΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ»ΠΎΠ² true ΠΈ false. ΠΡΠΈΠΌΠ΅ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ:
public final static COUNT: int = 10;
static c: char = `A';
static c1: char = 13;
private volatile m_flag:boolean;
protected m_list:java.util.ArrayList;
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄:
[<οΏ½ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ_Π΄ΠΎΡΡΡΠΏΠ°>] <οΏ½ΠΈΠΌΡ_ΠΌΠ΅ΡΠΎΠ΄Π°>(<οΏ½ΡΠΈΠΏ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°1>,<οΏ½ΡΠΈΠΏ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°2>, … ,<οΏ½ΡΠΈΠΏ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°_n>):<οΏ½ΡΠΈΠΏ_Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ_Π·Π½Π°ΡΠ΅Π½ΠΈΡ> [throws <οΏ½ΠΊΠ»Π°ΡΡ_ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ1>, …, <οΏ½ΠΊΠ»Π°ΡΡ_ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ_n>];
% Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ abstract Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΠ°Ρ ΡΠ°ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
% ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ
maxstack <οΏ½ΡΠΈΡΠ»ΠΎ>;
maxlocals <οΏ½ΡΠΈΡΠ»ΠΎ>;
[<οΏ½ΠΌΠ΅ΡΠΊΠ°1>:]
<οΏ½ΠΊΠΎΠΌΠ°Π½Π΄Π°1>;
…
[<οΏ½ΠΌΠ΅ΡΠΊΠ°_n>:]
<οΏ½ΠΊΠΎΠΌΠ°Π½Π΄Π°_n>;
[
protected_blocks;
<οΏ½ΠΊΠ»Π°ΡΡ_ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ> <οΏ½ΠΌΠ΅ΡΠΊΠ°>: <οΏ½ΠΌΠ΅ΡΠΊΠ°> > <οΏ½ΠΌΠ΅ΡΠΊΠ°>;
…
<οΏ½ΠΊΠ»Π°ΡΡ_ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ> <οΏ½ΠΌΠ΅ΡΠΊΠ°>: <οΏ½ΠΌΠ΅ΡΠΊΠ°> > <οΏ½ΠΌΠ΅ΡΠΊΠ°>;
]
end;
ΠΠ΄Π΅ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ_Π΄ΠΎΡΡΡΠΏΠ° — ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°: public, protected, private, static, final, abstract, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ»Π°Π³Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΌΠ΅ΡΠΎΠ΄Π°: ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_ABSTRACT. ΠΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π½ΡΠΌ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡΠΌ ΡΠ»Π°Π³ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° (ΡΠΌ. The Java Virtual Machine Specification), Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ public ΠΈ abstract. ΠΠΌΡ_ΠΌΠ΅ΡΠΎΠ΄Π° — ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Π»ΠΈΠ±ΠΎ ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ². Π’ΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠ½ΡΡΡΠΌΠΈ Π² ΡΠ·ΡΠΊΠ΅ Java (byte, short, int, long, char, float, double, boolean). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ void. ΠΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° throws Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ. ΠΠ»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌΠΈ, ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ maxstack ΠΈ maxlocals, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° (Π² ΡΠ΅ΡΡΡΠ΅Ρ Π±Π°ΠΉΡΠ½ΡΡ ΡΡΠ΅ΠΉΠΊΠ°Ρ ). ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ Ρ Π·Π°ΠΏΡΡΡΠΌΠΈ. ΠΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΊΠ°, ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΎΡ Π½Π΅Π΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ. ΠΠ΅ΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΌΠ΅ΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° none, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄ (ΠΏΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°). ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΌΠ΅ΡΠΊΡ Π² ΠΊΠΎΠ½Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° protected_blocks ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ (ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ) ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° finally ΠΈ ΡΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠΊ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ `:' ΠΈ `>'. ΠΠ΅ΡΠ²Π°Ρ ΠΈΠ· Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, Π²ΡΠΎΡΠ°Ρ Π½Π° Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ΅ΡΡΡ — Π½Π° ΠΌΠ΅ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΡΠ΄Π° ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² ΡΠ»ΡΡΠ°Π΅ finally.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΏΡΠΈΠ½ΡΡΡΠΌΠΈ Π² The Java Virtual Machine Specification. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅ΡΠΈΠΊΡ wide Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΅Π³ΠΎ ΠΈΠΌΠ΅ΡΡΠΈΠ΅, Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ wide_<οΏ½ΠΈΠΌΡ_ΠΊΠΎΠΌΠ°Π½Π΄Ρ>. Π€ΠΎΡΠΌΠ°ΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄:
Β· <ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ>; Π’Π°ΠΊΡΡ ΡΠΎΡΠΌΡ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: aaload, aastore, aconst_null, aload0, aload1, aload2, aload3, areturn, arraylength, astore0, astore1, astore2, astore3, athrow, baload, bastore, caload, castore, d2f, d2i, d2l, dadd, daload, dastore, dcmpg, dcmpl, dconst0, dconst1, ddiv, dload0, dload1, dload2, dload3, dmul, dneg, drem, dreturn, dstore0, dstore1, dstore2, dstore3, dsub, dup, dup2, dup2_x1, dup2_x2, dup_x1, dup_x2, f2d, f2i, f2l, fadd, faload, fastore, fcmpg, fcmpl, fconst0, fconst1, fconst2, fdiv, fload0, fload1, fload2, fload3, fmul, fneg, frem, freturn, fstore0, fstore1, fstore2, fstore3, fsub, i2b, i2c, i2d, i2f, i2l, i2s, iadd, iaload, iand, iastore, iconst0, iconst1, iconst2, iconst3, iconst4, iconst5, iconst_m1, idiv, iload0, iload1, iload2, iload3, imul, ineg, ior, irem, ireturn, ishl, ishr, istore0, istore1, istore2, istore3, isub, iushr, ixor, l2d, l2f, l2i, ladd, laload, land, lastore, lcmp, lconst0, lconst1, ldiv, lload0, lload1, lload2, lload3, lmul, lneg, lor, lrem, lreturn, lshl, lshr, lstore0, lstore1, lstore2, lstore3, lsub, lushr, lxor, monitorenter, monitorexit, nop, pop, pop2, return, saload, sastore, swap;
Β· <ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> <ΠΌΠ΅ΡΠΊΠ°>; Π’Π°ΠΊΡΡ ΡΠΎΡΠΌΡ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°: goto, goto_w, if_acmpeq, if_acmpne, if_acmpge, if_acmpgt, if_icmple, if_icmplt, if_icmpne, ifeq, ifge, ifgt, ifle, iflt, ifne, ifnonull, ifnull, jsr, jsr_w;
Β· <ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> <ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ>; Π§ΠΈΡΠ»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: aload, astore, dload, dstore, fload, fstore, iload, istore, lload, lstore, ret, bipush, sipush, wide_aload, wide_astore, wide_dload, wide_dstore, wide_fload, wide_fstore, wide_iload, wide_istore, wide_lload, wide_lstore, wide_ret;
Β· <οΏ½ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> @:<οΏ½ΠΈΠΌΡ_ΠΏΠΎΠ»Ρ>:<οΏ½ΡΠΈΠΏ_ΠΏΠΎΠ»Ρ>; Π’ΠΈΠΏ_ΠΏΠΎΠ»Ρ - ΠΈΠΌΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΏΡΠΈΠ½ΡΡΠΎΠ΅ Π² ΡΠ·ΡΠΊΠ΅ Java, Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Ρ: getfield, putfield, getstatic, putstatic;
Β· <οΏ½ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> @:<οΏ½ΠΈΠΌΡ_ΠΌΠ΅ΡΠΎΠ΄Π°>(<οΏ½ΡΠΈΠΏ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°1>, …, <οΏ½ΡΠΈΠΏ_ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°_n>):<οΏ½ΡΠΈΠΏ_Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ>; ΠΠ΄Π΅ΡΡ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ — ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠ½ΡΡΡΠ΅ Π² ΡΠ·ΡΠΊΠ΅ Java, ΠΈΠΌΠ΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠ², Π»ΠΈΠ±ΠΎ (ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ) void. ΠΠΎΠΌΠ°Π½Π΄Ρ: invokespecial, invokestatic, invokevirtual;
Β· <οΏ½ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> <οΏ½ΠΏΠΎΠ»Π½ΠΎΠ΅_ΠΈΠΌΡ_ΠΊΠ»Π°ΡΡΠ°>; Π’Π°ΠΊΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: anewarray, checkcast, instanceof, new;
Β· <οΏ½ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> <οΏ½ΡΠ΅Π»ΠΎΠ΅_ΡΠΈΡΠ»ΠΎ_ΠΈΠ½Π΄Π΅ΠΊΡ_ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ> <οΏ½ΡΠ΅Π»ΠΎΠ΅_ΡΠΈΡΠ»ΠΎ>; ΠΠΎΠΌΠ°Π½Π΄Ρ: iinc, wide_iinc;
Β· <οΏ½ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ΅_ΠΈΠΌΡ> <οΏ½ΡΠΈΠΏ> <οΏ½ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°>; - ΠΊΠΎΠΌΠ°Π½Π΄Ρ ldc, ldc_w, ldc_2w. ΠΠ΄Π΅ΡΡ ΡΠΈΠΏ — int, float, string (Π΄Π»Ρ ldc, ldc_w), double, long (Π΄Π»Ρ ldc_2w). ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΏ (ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ — Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π² ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΏΡΠΈΠ½ΡΡΠΎΠΌ Π² Java, ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² Π΄Π²ΠΎΠΉΠ½ΡΡ ΠΊΠ°Π²ΡΡΠΊΠ°Ρ , ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π²Π΅ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° Π΄Π²ΠΎΠΉΠ½Π°Ρ ΠΊΠ°Π²ΡΡΠΊΠ° Π² ΡΡΡΠΎΠΊΠ΅);
Β· invokeinterface <οΏ½ΠΈΠΌΡ_ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°>:<οΏ½ΠΈΠΌΡ_ΠΌΠ΅ΡΠΎΠ΄Π°>(<οΏ½ΡΠΈΠΏ_Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°1>, …, <οΏ½ΡΠΈΠΏ_Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°2>):<οΏ½ΡΠΈΠΏ_Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ_Π·Π½Π°ΡΠ΅Π½ΠΈΡ> <οΏ½ΡΠ΅Π»ΠΎΠ΅_ΡΠΈΡΠ»ΠΎ>; - ΡΠΈΠΏΡ — Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²;
Β· multianewarray <οΏ½ΠΏΠΎΠ»Π½ΠΎΠ΅_ΠΈΠΌΡ_ΠΊΠ»Π°ΡΡΠ°> <οΏ½ΡΠΈΡΠ»ΠΎ_ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ>;
Β· newarray double;
Β· tableswitch <οΏ½ΡΠΈΡΠ»ΠΎ1>:<οΏ½ΡΠΈΡΠ»ΠΎ_n> default: <οΏ½ΠΌΠ΅ΡΠΊΠ°0> <οΏ½ΡΠΈΡΠ»ΠΎ1>:<οΏ½ΠΌΠ΅ΡΠΊΠ°1> … <οΏ½ΡΠΈΡΠ»ΠΎ_n>:<οΏ½ΠΌΠ΅ΡΠΊΠ°_n>; ΠΠ΄Π΅ΡΡ ΡΠΈΡΠ»Π° ΡΠΈΡΠ»ΠΎ1 … ΡΠΈΡΠ»ΠΎ_n Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΈΡΠ»Π°, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠΈΡΠ΅Π», Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΠΌΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°. lookupswitch default:<οΏ½ΠΌΠ΅ΡΠΊΠ°0> <οΏ½ΡΠΈΡΠ»ΠΎ1>:<οΏ½ΠΌΠ΅ΡΠΊΠ°1> … <οΏ½ΡΠΈΡΠ»ΠΎ_n>:<οΏ½ΠΌΠ΅ΡΠΊΠ°_n>; ΠΠ΄Π΅ΡΡ ΡΡΠ΅Π΄ΠΈ ΡΠΈΡΠ΅Π», Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΠΌΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ . ΠΡΠΈ ΡΠΈΡΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅Π»ΡΠΌΠΈ, ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ Π±ΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ, ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
Π’Π΅ΡΡΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ:
1.
%ΡΠ°ΠΉΠ» Summator. jsm
public class Summator;
fields;
private m_i:int;
methods;
%ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΠ°Π½ΠΎΡΠΈΡ Π² ΠΏΠΎΠ»Π΅ m_i ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ΡΡ Π² ΡΡΡΠΎΠΊΠ΅,
%ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ
%ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π»ΠΈΠ±ΠΎ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅,
%ΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
public (java.lang.String):void;
maxstack 4;
maxlocals 2;
aload0; %this
dup;
invokespecial java.lang.Object:():void;
aload1; %arg1
begin_try:
invokestatic java.lang.Integer:parseInt (java.lang.String):int;
dup;
iconst0;
if_icmpge end_try;
new java.lang.Exception;
dup;
invokespecial java.lang.Exception:():void;
athrow;
end_try:
putfield @:m_i:int;
return;
exception:
pop;
getstatic java.lang.System:out:java.io.PrintStream;
ldc string «Invalid argument» ;
invokevirtual java.io.PrintStream:println (java.lang.String):void;
return;
protected_blocks;
java.lang.Exception
begin_try: end_try > exception;
end;
%Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΌΠΌΡ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π» ΠΎΡ 1 Π΄ΠΎ m_i.
public getSum ():int;
maxstack 3;
maxlocals 2;
iconst0;
istore1;
aload0; %this
getfield @:m_i:int;
loop:
dup;
iload1; %result
iadd;
istore1; %result
iconst1;
isub;
dup;
iconst0;
if_icmpgt loop;
pop;
iload1; %result
ireturn;
end;
%Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ m_i
public getI ():int;
maxstack 1;
maxlocals 1;
aload0; %this
getfield @:m_i:int;
ireturn;
end;
2.
%ΡΠ°ΠΉΠ» Switches. jsm
public class Switches;
fields;
methods;
%ΠΎΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Java.
% static int function (int i) {
% switch (i) {
% case 1: return 2;
% case 2: return -1;
% default: return 0;
% }
% }
public static lookup (int):int;
maxstack 1;
maxlocals 1;
iload0;
lookupswitch
default: l_def
1: l1
2: l2;
l_def:
iconst0;
ireturn;
l1:
iconst2;
ireturn;
l2:
iconst_m1;
ireturn;
end;
public static table (int):int;
maxstack 1;
maxlocals 1;
iload0;
tableswitch 1:2
default: l_def
1: l1
2: l2;
l_def:
iconst0;
ireturn;
l1:
iconst2;
ireturn;
l2:
iconst_m1;
ireturn;
end;
3.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ· 5 ΠΊΠ»Π°ΡΡΠΎΠ².
%——————————————————————————————-%
%ΡΠ°ΠΉΠ» Figure. jsm
public interface Figure;
methods;
public abstract getArea ():double;
%——————————————————————————————-%
%——————————————————————————————-%
%ΡΠ°ΠΉΠ» Circle. jsm
public class Circle;
implements Figure;
fields;
private m_radius:double;
methods;
public (double):void;
maxstack 4;
maxlocals 3;
aload0;
invokespecial java.lang.Object:():void;
dload1;
dconst0;
dcmpg;
ifge l_endif;
new java.lang.IllegalArgumentException;
dup;
invokespecial java.lang.IllegalArgumentException:():void;
athrow;
l_endif:
aload0;
dload1;
putfield @:m_radius:double;
return;
end;
public getArea ():double;
maxstack 4;
maxlocals 1;
aload0;
getfield @:m_radius:double;
aload0;
getfield @:m_radius:double;
dmul;
ldc2_w double 3.14 159 265;
dmul;
dreturn;
end;
%——————————————————————————————-%
%——————————————————————————————-%
%ΡΠ°ΠΉΠ» Rectangle. jsm
public class Rectangle;
implements Figure;
fields;
private m_a:double;
private m_b:double;
methods;
public (double, double):void;
maxstack 4;
maxlocals 5;
aload0;
invokespecial java.lang.Object:():void;
dload1;
dconst0;
dcmpl;
iflt l_error;
dload3;
dconst0;
dcmpl;
ifge l_endif;
l_error:
new java.lang.IllegalArgumentException;
dup;
invokespecial java.lang.IllegalArgumentException:():void;
athrow;
l_endif:
aload0;
dload1;
putfield @:m_a:double;
aload0;
dload3;
putfield @:m_b:double;
return;
end;
public getArea ():double;
maxstack 4;
maxlocals 1;
aload0;
getfield @:m_a:double;
aload0;
getfield @:m_b:double;
dmul;
dreturn;
end;
%——————————————————————————————-%
%——————————————————————————————-%
%ΡΠ°ΠΉΠ» Square. jsm
public class Square;
extends Rectangle;
methods;
public (double):void;
maxstack 5;
maxlocals 3;
aload0;
dload1;
dload1;
invokespecial Rectangle:(double, double):void;
return;
end;
%——————————————————————————————-%
%——————————————————————————————-%
%ΡΠ°ΠΉΠ» MainClass. jsm
public class MainClass;
methods;
public ():void;
maxstack 1;
maxlocals 1;
aload0;
invokespecial java.lang.Object:():void;
return;
end;
public static main (java.lang.String[]):void;
maxstack 8;
maxlocals 7;
iconst3;
anewarray Figure;
astore1;
aload1;
iconst0;
new Circle;
dup;
ldc2_w double 10;
invokespecial Circle:(double):void;
aastore;
aload1;
iconst1;
new Rectangle;
dup;
dconst1;
ldc2_w double 2;
invokespecial Rectangle:(double, double):void;
aastore;
aload1;
iconst2;
new Square;
dup;
ldc2_w double 3;
invokespecial Square:(double):void;
aastore;
dconst0;
dstore2;
iconst0;
istore 4;
l50:
iload 4;
aload1;
arraylength;
if_icmpge l75;
dload2;
aload1;
iload 4;
aaload;
invokeinterface Figure: getArea ():double, 1;
dadd;
dstore2;
iinc 4, 1;
goto l50;
l75:
new java.io.BufferedReader;
dup;
new java.io.InputStreamReader;
dup;
getstatic java.lang.System:in:java.io.InputStream;
invokespecial java.io.InputStreamReader:(java.io.InputStream):void;
invokespecial java.io.BufferedReader:(java.io.Reader):void;
astore 4;
l50:
aload 4;
invokevirtual java.io.BufferedReader:readLine ():java.lang.String;
invokestatic java.lang.Double:parseDouble (java.lang.String):double;
dstore 5;
getstatic java.lang.System:out:java.io.PrintStream;
dload 5;
dload2;
dadd;
invokevirtual java.io.PrintStream:println (double):void;
l114:
goto l127;
l117:
astore 4;
getstatic java.lang.System:out:java.io.PrintStream;
ldc string «Error» ;
invokevirtual java.io.PrintStream:println (java.lang.String):void;
l127:
return;
protected_blocks;
java.io.IOException l75: l114 > l117;
end;
%——————————————————————————————-%
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π° Java (Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΎΠ·Π΄Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ javap Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ):
//—————————————————————————————-//
public interface Figure {
double getArea ();
}
//—————————————————————————————-//
//—————————————————————————————-//
public class Circle implements Figure {
private double m_radius;
public Circle (double radius) {
if (radius<0)
throw new IllegalArgumentException ();
m_radius = radius;
}
public double getArea () {
return m_radius*m_radius*Math.PI;
}
}
//—————————————————————————————-//
//—————————————————————————————-//
public class Rectangle implements Figure {
private double m_a;
private double m_b;
public Rectangle (double a, double b) {
if (!((a>=0)&&(b>=0)))
throw new IllegalArgumentException ();
m_a = a;
m_b = b;
}
public double getArea () {
return m_a*m_b;
}
}
//—————————————————————————————-//
//—————————————————————————————-//
public class Square extends Rectangle {
public Square (double a) {
super (a, a);
}
}
//—————————————————————————————-//
//—————————————————————————————-//
import java.io.*;
public class MainClass {
public static void main (String[] args) {
Figure[] figures = new Figure[3];
figures[0] = new Circle (10);
figures[1] = new Rectangle (1, 2);
figures[2] = new Square (3);
double sum = 0;
for (int i = 0; i
sum += figures[i]. getArea ();
try{
BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
double d = Double. parseDouble (br.readLine ());
System.out.println (d+sum);
} catch (IOException exc) {
System.out.println («Error!»);
}
}
}
//—————————————————————————————-//
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java (JDK Π²Π΅ΡΡΠΈΠΈ 1.5). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Java v 1.5.
ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΈΠΌΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠ»Π°ΡΡΠ° (ΡΠ²Π½ΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. class ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ). Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. Π ΡΠ»ΡΡΠ°Π΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ°ΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (ΠΏΡΠΎΡ ΠΎΠ΄ΠΎΠ²):