ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

АссСмблСр для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 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 ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ). Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ сущСствуСт, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ся Π±Π΅Π· прСдупрСТдСния. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ синтаксичСской ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ошибки Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ выводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС.

МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько основных этапов компиляции (ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ²):

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ