рд╕рд╣реА рдЙрдкрдХрд░рдг

рджреАрдХреНрд╖рд╛ рдХреЗ рдмрджрд▓реЗ



рд╣рдореЗрд╢рд╛ ... рдирд╣реАрдВред рдХрднреА рднреА рдПрдХ рдмрд░реНрдлрд╝реАрд▓реЗ рддреВрдлрд╝рд╛рди рдореЗрдВ рди рдЬрд╛рдПрдВ, рдРрд╕реЗ рдордЬрд╝реЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦреЗрдВред
рдЫрд╡рд┐
рдЧрд┐рд▓реМрдо - рд▓реАрдб рдЧреНрд░реВрд╡реА рднрд╛рд╖рд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕

рдмреБрд░рд╛рдИ рдХреЗ рдкреНрд░рддрд┐ рдЪрд┐рдВрддрди


рдореЗрд░рд╛ рдПрдХ рджреЛрд╕реНрдд рдкрд╣реЗрд▓реА рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реИред рдХреЛрдИ рднреА, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рд╣рд┐рддред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдЕрдВрддрд┐рдо рдордЬрд╝рд╛ рд╣реИ:
рд╕реНрдерд┐рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ, рддрд╛рдХрд┐ рдПрд╕реНрдЯрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдП:
public class Test { static { //Write some code here } public static void main(String[] args) { Integer a = 20; Integer b = 20; assert (a + b == 60); } } 

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджрд╛рд╡реЗ (-ea рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рдлрд┐рд░ рдПрдХ рдирд┐рд░реНрдгрдп рдФрд░ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рддрд░реНрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЖрдк рдЯреВрдЯ рдЧрдП рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдЪрд▓реЛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдЗрдВрдЯрд░реНрдЬрд░ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛ рддрдереНрдпреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  1. рдЗрд╕рдореЗрдВ рдЫреЛрдЯреЗ (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп) рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд╣реИ
  2. рдСрдЯреЛ-рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)

рд╣рдореЗрдВ рдпрд╣ рднреА рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╢ рдирд╛рдо рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╣рд╛рдВ рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди rt.jar рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪреЗрдВрдЧреЗ? рдпрд╣ рдХреИрд╢ рдПрдХ рдирд┐рдЬреА рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИред рд░рд╛рд╣-рд░рд╛рд╣ред

рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗ:
  1. рд╣рдо рдХреНрд▓рд╛рд╕ рдЗрдВрдЯреЗрдЧрд░ рдХреА рдПрдХ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддреЗ рд╣реИрдВ
  2. рд╣рдо рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
  3. рдЙрдирдореЗрдВ рд╕реЗ рд╣рдо рд╕рд╣реА рдПрдХ рдкрд╛рддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ - рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реИред рдпрд╣ рд╕рдЪ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рдд рдореЗрдВ рддрд▓реНрд▓реАрди рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд░рд╣реЗрдЧрд╛, рд╣рд╛рдБред)
  4. рдХреИрд╢ рдлреАрд▓реНрдб рд▓реЗрдВ
  5. рдпрд╣ рдирд┐рдЬреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд▓рдн рдмрдирд╛рдПрдВ
  6. рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рд╕реЗрд▓ рдХрд╛ рдорд╛рди "20" рд╕реЗ рдмрджрд▓рдХрд░ "30" рдХрд░ рджреЗрдВ

рдпрд╣рд╛рдБ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:
  static { try { Class<?>[] declaredClasses = Integer.class.getDeclaredClasses(); Field cacheField = declaredClasses[0].getDeclaredField("cache"); cacheField.setAccessible(true); ((Integer[]) cacheField.get(null))[20 + 128] = 30; } catch (Exception e) { e.printStackTrace(); } } 

рдореИрдВ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди, рдореЗрд░реЗ рд▓рд┐рдП, рдбрд░рд╛рд╡рдиреА-рдбрд░рд╛рд╡рдиреАред рдПрдХ рдмрджрд╕реВрд░рдд рдХреЛрдб рдЬреЛ рдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рджреГрд╢реНрдпрддрд╛ рдФрд░ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рд╛рдл-рдХрд┐рдХ рдХреЗ рд╕рд╛рде рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯреЗрдЧрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдСрдЯреЛ-рдмреЙрдХреНрд╕рд┐рдВрдЧ)ред

рд╡реИрд╕реЗ рднреА, рд╣рдо рд╕рд┐рд░реНрдл рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ рдХрд┐ рдЗрдВрдЯреЗрдЧрд░ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдХреИрд╢ рд╣реИ, рдЬрд┐рд╕реЗ рдЯреНрд╡рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдо рдЗрд╕ рдЪрд╛рд▓ рдХреЛ рдПрдХ рдкреНрд▓рд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрддрдиреА рд╕рд░рд▓ рдмрд╛рдд рдЗрддрдиреА рдХрдард┐рди рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЛ рддреЗрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рд╣реА рд╕реНрддреНрд░реА рд╣реИ, рдареАрдХ рд╣реИ?) ред рдЬрд╛рд╡рд╛ рдПрдХ рд╕реНрдерд┐рд░ рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдареАрдХ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдЗрд╕ рддрдереНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 20 + 20 = 40ред рдЦреИрд░, рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ ред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕ рддрд░рд╣ рдХреА рддрд░рдХреАрдмреЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдкреНрд▓рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рдмрд┐рд▓реНрдХреБрд▓, рд▓реЗрдХрд┐рди рдЗрд╕реА рддрд░рд╣ рдХреА)ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЙрдкрдХрд░рдг рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░реВрд╡реАред

рд╣рдо рдЗрд╕реЗ рд╕рд╣реА рддреЛрдбрд╝ рджреЗрдВрдЧреЗ!


рдпрд╣рд╛рдБ Groovy рдкрд╣реЗрд▓реА рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:
 //Write some code here Integer a = 20 Integer b = 20 assert 60 == a + b 

рдкрд╣реЗрд▓реА рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдмрд╛рдд (рдореБрдЦреНрдп рдХреЗ рд╕рд╛рде рдЕрдкрдорд╛рди рдХреЗ рдмрд┐рдирд╛), рдмреЗрд╡рдХреВрдл рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдФрд░ -ea рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛), рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЧреНрд░реВрд╡реА рдПрдХ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛ рд╣реИ, рд╕рдорд╛рдзрд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
  1. рдЧреНрд░реВрд╡реА рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреЛрдИ рдСрдЯреЛ-рдмреЙрдХреНрд╕рд┐рдВрдЧ рдирд╣реАрдВ)
  2. Groovy рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдердиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, "+" рдСрдкрд░реЗрдЯрд░ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрд╢реНрдЪрд░реНрдп :) "рдкреНрд▓рд╕ ()"
  3. рдЧреНрд░реВрд╡реА рдореЗрдВ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде, рдЖрдк рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ:
  1. MetaClass Integer рдХреЛ рд▓реЗрдВ
  2. рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд▓рд╕ () рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ 60 рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ

рдФрд░ рд╡рд╣ рд╕рдм рд╣реИ! рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
 Integer.metaClass.plus = {int i -> 60 } 

рдпрд╣рд╛рдБ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ - рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд┐рдирд╛ред

рдмрд┐рд▓реНрдХреБрд▓ рджреЛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ:


  1. рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдХрд╡рд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рд╣реЛрдВред
  2. рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

Sivkel!


habrahabr.ru/post/144407

Source: https://habr.com/ru/post/In144297/


All Articles