рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рд▓реЛрдЧ рдЖрдзреБрдирд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХ, рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрд╛рд╡рд╛ рдЯреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рднреА рд╕рдордЭреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ ASM, cglib, Javassist рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╛рдпрдЯреЗрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдмрд╛рддреЗрдВ рдХреА рд╕рдордЭ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд▓реЗрдЦ рдореЗрдВ рдЙрди рдореВрд▓ рдмрд╛рддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп (рд▓рдЧрднрдЧ рдкреНрд░рддрд┐) рдХреЛ рдЦреЛрджрдиреЗ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ рдПрдХ рдкреАрдУрдЬреЗрдУ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдЯ рдФрд░ рд╕реЗрдЯрд░ред
public class Foo { private String bar; public String getBar(){ return bar; } public void setBar(String bar) { this.bar = bar; } }
рдЬрдм рдЖрдк javac Foo.java рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ Foo.class рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдпрдЯреЗрдХреЛрдб рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреИрд╕реА рд╣реИ:

рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдирдВрдмрд░реЛрдВ (рдмрд╛рдЗрдЯреНрд╕) рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХреЛ рдУрдкрдХреЛрдбреНрд╕ (рдореЗрдиреЗрдорд┐рдХреНрд╕) рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдХреНрд░реВрд░ рд╣реЛрдЧрд╛ред рдЖрдЗрдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдиреЗрдореЛрдирд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдВред
Javap -c Foo рдХрдорд╛рдВрдб рдмрд╛рдИрдЯрдХреЛрдб рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛:
public class Foo extends java.lang.Object { public Foo(); Code: 0: aload_0 1: invokespecial #1;
рдХрдХреНрд╖рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЙрддреНрдкрдиреНрди рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХреЗ рдмрд╛рдИрдЯрдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╛рдЗрдЯ-рдХреЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ aload_0 рдФрд░ aload_1 рд╣реИ), рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ aload_0 рдФрд░ istore_2 рдЬреИрд╕реЗ рдЙрдкрд╕рд░реНрдЧ рд╣реИрдВред рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрдкрд╕рд░реНрдЧ "рдП" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдУрдкрдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред "I", рдХреНрд░рдорд╢рдГ, рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ # 1 рдФрд░ # 2 рдХреЗ рдЕрдЬреАрдм рдСрдкрд░реЗрдВрдбреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрдЧ рдХреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдкреВрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред Javap -c -s -verbose (-s рдХреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, -verbose to verbose output)
Compiled from "Foo.java" public class Foo extends java.lang.Object SourceFile: "Foo.java" minor version: 0 major version: 50 Constant pool: const #1 = Method #4.#17;
рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЕрдЬреАрдм рдСрдкрд░реЗрдВрдб рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, # 2:
const # 2 = рдлрд╝реАрд▓реНрдб # 3. # 18; // Foo.bar:Ljava/lang/String;
рдпрд╣ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ:
const # 3 = рд╡рд░реНрдЧ # 19; // рдлреВ
const # 18 = NameAndType # 5: # 6; // рдмрд╛рд░: Ljava / lang / рд╕реНрдЯреНрд░рд┐рдВрдЧ;
рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЛрдб рдПрдХ рдирдВрдмрд░ (0: aload_0) рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдлреНрд░реЗрдо рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджреЗрд╢ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ - рдореИрдВ рдЖрдЧреЗ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдмрд╛рдЗрдЯрдХреЛрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдирд┐рд╖реНрдкрд╛рджрди рдореЙрдбрд▓ рдХреЛ рджреЗрдЦреЗрдВред JVM рд╕реНрдЯреИрдХ-рдЖрдзрд╛рд░рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдПрдХ JVM рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реНрд░реЗрдо рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдбрд┐рдмрдЧрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реНрд░реЗрдо рджреЗрдЦреЗрдВрдЧреЗ:

рд╣рд░ рдмрд╛рд░ рдЬрдм рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдлреНрд░реЗрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝реНрд░реЗрдо рдореЗрдВ рдСрдкрд░реЗрдВрдб рд╕реНрдЯреИрдХ, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рдПрдХ рд╕рд░рдгреА рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдкреВрд▓ рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИред

рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдкрд░реЗрдВрдбреНрд╕ рдХрд╛ рдвреЗрд░ - рд╕реНрдЯреИрдХ рдореЗрдВ рдорд╛рди рд▓рд┐рдЦрдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП LIFO рд╕реНрдЯреИрдХ; рдЖрдХрд╛рд░ рднреА рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рдСрдкрдХреЛрдб рд╕реНрдЯреИрдХ рдореЗрдВ рдорд╛рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕реНрдЯреИрдХ рд╕реЗ рдСрдкрд░реЗрдВрдб рд▓реЗрддреЗ рд╣реИрдВ, рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред рдСрдкрд░реЗрдВрдб рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ (рд░рд┐рдЯрд░реНрди рдорд╛рди) рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public String getBar(){ return bar; } public java.lang.String getBar(); Code: 0: aload_0 1: getfield #2;
рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рддреАрди рдСрдкрдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ opcode, aload_0, рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ 0 рдХреЗ рд╕рд╛рде рдорд╛рди рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ
рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рдореЗрд╢рд╛ 0. рдХрд╛ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд▓рд╛ рдСрдлреАрдХреЛрдб, рдЧреЗрдЯрдлреАрд▓реНрдб, рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдмрд╛рдпреЛрдЯреЗрдХ рд╕рд░рдгреА рд╣реИред рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ .class рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдмрд╛рдпрдЯреЗрдХреЛрдб рд╕рд░рдгреА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рди рджреЗрдЦреЗрдВрдЧреЗ:

рддреЛ, getBar рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рдИрдЯреЗрдХреЛрдб 2A B4 00 02 B0 рд╣реИред 2A рдЕрд▓реЛрдПрдб_0 рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмреА 0 рдЖрд░рдЯрд░реНрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рддреАрди рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ, рдФрд░ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ 5 рддрддреНрд╡ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ getfield (B4) рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ (00 02) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд░рдгреА рдореЗрдВ 2 рдФрд░ 3 рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд░рдгреА рдореЗрдВ 5 рддрддреНрд╡ рд╣реИрдВред рдЖрд░рдЯрд░реНрди рдирд┐рд░реНрджреЗрд╢ рдХреЛ 4 рдкрджреЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реНрдерд╛рдиреАрдп рдЪрд░ рддрд╛рд▓рд┐рдХрд╛
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
public class Example { public int plus(int a){ int b = 1; return a + b; } }
рдпрд╣рд╛рдВ рджреЛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╣реИрдВ - рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ int bред рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рдХрд┐ рдмрд╛рдпрдХрдЯреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
public int plus(int); Code: Stack=2, Locals=3, Args_size=2 0: iconst_1 1: istore_2 2: iload_1 3: iload_2 4: iadd 5: ireturn LineNumberTable: line 5: 0 line 6: 2
LocalVariableTable:
рд▓рдВрдмрд╛рдИ рд╕реНрд▓реЙрдЯ рдирд╛рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
0 6 0 рдпрд╣ LExample;
0 6 1 рдП I
2 4 2 рдмреА рдЖрдИ
рд╡рд┐рдзрд┐ iconst_1 рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░ 1 рд▓реЛрдб рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ istore_2 рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдЪрд░ 2 рдореЗрдВ рд░рдЦрддреА рд╣реИред рдЕрдм, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рд╕реНрд▓реЙрдЯ 2 рдХреЛ рдЪрд░ b рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рдЕрдЧрд▓рд╛, iload_1 рд╕реНрдЯреИрдХ рдкрд░ рдорд╛рди рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, iload_2 рдмреА рдХреЗ рдореВрд▓реНрдп рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред iadd рд╕реНрдЯреИрдХ рд╕реЗ 2 рдСрдкрд░реЗрдВрдб рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ
рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рдЗрдЯ рдХреЛрдб рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░рд╛рдЗ-рдХреИрдЪ-рдЖрдЦрд┐рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдПред
public class ExceptionExample { public void foo(){ try { tryMethod(); } catch (Exception e) { catchMethod(); }finally{ finallyMethod(); } } private void tryMethod() throws Exception{} private void catchMethod() {} private void finallyMethod(){} }
рдлреВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб () рд╡рд┐рдзрд┐:
public void foo(); Code: 0: aload_0 1: invokespecial #2;
рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрд╢рд┐рд╢-рдХреИрдЪ-рдЗрди рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╡ рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ: рдЖрдЦрд┐рд░рдХрд╛рд░ рдореИрдордереЛрдб () рдмреНрд▓реЙрдХ рддреАрди рдмрд╛рд░ (!) рд╣реИред рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
0: aload_0
1: invokespecial # 2; // рд╡рд┐рдзрд┐ tryMethod :() рд╡реА
4: aload_0
5: invokespecial # 3; // рд╡рд┐рдзрд┐ рдЕрдВрдд рдореЗрдВ рдореИрдереЛрдб :() рд╡реА
рдпрджрд┐ рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЧреЛрдЯреЛ рдирд┐рд░реНрджреЗрд╢ рд░рд┐рдЯрд░реНрди рдУрдкреЛрдб рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ 30 рд╡реЗрдВ рд╕реНрдерд╛рди рдкрд░ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИред
рдпрджрд┐ TryMethod рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдЕрдкрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрд╣рд▓рд╛ рдЙрдкрдпреБрдХреНрдд (рдЖрдВрддрд░рд┐рдХ) рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд╡рд╛рдж рдкрдХрдбрд╝рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ 11 рд╣реИ:
0 4 11 рдХрдХреНрд╖рд╛ рдЬрд╛рд╡рд╛ / рд▓реИрдВрдЧ / рдЕрдкрд╡рд╛рдж
рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИрдореИрдереЛрдб () рдФрд░ рдЕрдВрдд рдореЗрдВ рдореИрдереЛрдб ():
11: astore_1
12: aload_0
13: рдЕрджреГрд╢реНрдп # 5; // catchMethod рд╡рд┐рдзрд┐ :() рд╡реА
16: aload_0
17: рдЕрджреГрд╢реНрдп # 3; // рдЕрдВрдд рдореЗрдВ рдореИрдереЛрдб рд╡рд┐рдзрд┐ :() рд╡реА
рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдФрд░ рдЕрдкрд╡рд╛рдж рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдкрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рддрд┐ 23 рд╣реЛрдЧреА:
0 4 23 рдХрд┐рд╕реА рднреА
резрез резрем реирей рдХреЛрдИ
реирей реирек реирей рдХреЛрдИ
23 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢:
23: astore_2
24: aload_0
25: рдЕрджреГрд╢реНрдп # 3; // рд╡рд┐рдзрд┐ рдЕрдВрдд рдореЗрдВ рдореИрдереЛрдб :() рд╡реА
28: aload_2
29: рдПрдереНрд░реЛ
30: рд╡рд╛рдкрд╕реА
рддреЛ рдЖрдЦрд┐рд░рдХрд╛рд░ рдореЗрдереЛрдб () рдХреЛ рд╡реИрд╕реЗ рднреА рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ aload_2 рдФрд░ рдПрдереНрд░реЛ рдЕрдирд╣реЗрд▓реНрдбреЗрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖рдпреЗ JVM рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХреБрдЫ рд╣реА рдмрд┐рдВрджреБ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░рд╡реЙрд░реНрдХ рдкреАрдЯрд░ рд╣реИрдЧрд░ рдХреЗ рд▓реЗрдЦ, рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рд╕реЗ рдереЗ: рдЕрдВрдбрд░рдЯреЗрдХрд┐рдВрдЧ рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЛ рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдЦ рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдмреАрд╕реАрдИрдПрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб рдореЗрдВ рдмрд╛рдЗрдЯрдХреЛрдб рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХрд╛ рдПрдХ рд╕рднреНрдп рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдирд╛ рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реНрд░реЛрдд рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЧреНрд░рд╛рдлрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдХреИрд╕реЗ рдмрд╛рдЗрдЯрдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдЧрд╣рд░рд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ, рдЬреЗрд╡реАрдПрдо рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ, рдпрд╛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред