рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдиреБрдмрдВрдз рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

рд╢реБрдн рджреЛрдкрд╣рд░

рдЬрд╛рд╡рд╛ рдХреЛрд░ рдбрд┐рд╕реНрдЯреЗрдВрд╕ рдПрдЬреБрдХреЗрд╢рди рдХреЛрд░реНрд╕ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдЕрдзреНрдпрдпрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ , рдореИрдВ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦ тАЛтАЛрд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЗрдЦреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред



рдореИрдВ рдСрдирд▓рд╛рдЗрди рд╢рд┐рдХреНрд╖рд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо udemy.com (рдХреМрд░рд╕реЗрд░рд╛ / рдПрдбрдПрдХреНрд╕ рдХреЗ рд╕рдорд╛рди) рдкрд░ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдХрд╛рд▓рд╛ рднреА рд╕рд┐рдЦрд╛рддрд╛ рд╣реВрдВред



рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рдж рдЕрд╕реЗрд╕рд░реАрдЬ" рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рдж рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред



рдореВрд▓ рдкреНрд░рдХрд╛рд╢рди рди рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдореЗрдВ рдореБрдЦрд░ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╡рд░реНрдЧ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди-рдмрд╛рдп-рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рдЪрдп рднреА рд╣реИред



рдЕрдиреНрдп рдЬрд╛рд╡рд╛ рдХреЛрд░ рд▓реЗрдЦ рдФрд░ рдЕрдиреБрд╡рд╛рдж


рдорд▓реНрдЯреАрдХреЛрд░ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд▓реЗрдЦ рдФрд░ рдЕрдиреБрд╡рд╛рдж




PS рд▓реЗрдЦрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рд░реВрд╕реА рднрд╛рд╖рд╛ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдзреНрдпрд╛рди рд╕реЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрдПрдо рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред






рдЕрднрд┐рдХрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (oracle.com: рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рдж рдЕрд╕реЗрд╕рд░реАрдЬ)



рдПрдХ рдореБрдЦрд░ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдмрдпрд╛рди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдХрдг рдХреА рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк "рджрд╛рд╡рд╛" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдЧрддрд┐ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрддрд┐ рд╕реЗ рдХрдо рд╣реИред



рдкреНрд░рддреНрдпреЗрдХ рдХрдерди рдореЗрдВ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреА рд░рд╛рдп рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рд╕рд╣реА рд╣реЛрдЧреАред рдЕрдиреНрдпрдерд╛, рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рд╕реЗ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рддреНрдп рд╣реИ, рдПрдХ рдореБрдЦрд░ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рддреНрд░реБрдЯрд┐ рдореБрдХреНрдд рд╣реИред



рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрдпрд╛рди рд▓рд┐рдЦрдирд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдФрд░ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ, рдмрдпрд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред



рдпрд╣ рд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдкрд░рд┐рдЪрдп

рдХреЛрдб рдореЗрдВ рдПрдВрдмреЗрдбрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕

рджрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛

рджрд╛рд╡реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдирд╛

рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛

рдбрд┐рдЬрд╛рдЗрди рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди





рдкрд░рд┐рдЪрдп



рдореБрдЦрд░ рдХрдерди рдХреЗ рджреЛ рд░реВрдк рд╣реИрдВред рдкрд╣рд▓рд╛, рд╕рд░рд▓ рд░реВрдк рд╣реИ:

assert Expression1;
      
      





рдЬрд╣рд╛рдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 1 рдПрдХ рдмреВрд▓рд┐рдпрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рдЬрдм рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 1 рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдЧрд▓рдд ( рдЧрд▓рдд ) рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ java.lang.AssertionError рдлреЗрдВрдХрддрд╛ рд╣реИред

рдЕрдиреБрдореЛрджрди рдХрд╛ рджреВрд╕рд░рд╛ рд░реВрдк рд╣реИ:

 assert Expression1 : Expression2;
      
      





рдЬрд╣рд╛рдВ:



рдПрдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦрд░ рдХрдерди рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд AssertionError рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 2 рдорд╛рди рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

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

 package java.lang; public class AssertionError extends Error { ... public AssertionError(Object detailMessage) {...} public AssertionError(boolean detailMessage) {...} public AssertionError(char detailMessage) {...} public AssertionError(int detailMessage) {...} public AssertionError(long detailMessage) {...} public AssertionError(float detailMessage) {...} public AssertionError(double detailMessage) {...} ... }
      
      





рдпрд╣ рдЖрдкрдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 2 рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрджрд┐рдо рдпрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ :

 public class App { public static void main(String[] args) { assert args != null : 1; assert args != null : 1.0; assert args != null : false; assert args != null : "Hello!"; assert args != null : new int[] {10, 20, 30}; }
      
      





рдпрд╛ рдордирдорд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ

 public class App { public static void main(String[] args) { assert args != null : f0(); assert args != null : f1(); assert args != null : f2(); assert args != null : f3(); assert args != null : f4(); } private static byte f0() {return 0;} private static double f1() {return 0.0;} private static boolean f2() {return true;} private static String f3() {return "Hello!";} private static int[] f4() {return new int[] {10, 20, 30};} }
      
      





рд▓реЗрдХрд┐рди рд╢реВрдиреНрдп рд▓реМрдЯрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реИ

 public class App { public static void main(String[] args) { assert args != null : f(); //    } private static void f() {} } >> COMPILATION ERROR: 'void' type is not allowed here
      
      









рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдмрдпрд╛рди рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░рдирд╛ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред рд╕рдВрджреЗрд╢ рдХреЛ рдЖрдкрдХреЛ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдВрддрддрдГ, рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдиреЗ рдмрдпрд╛рди рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдВрджреЗрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЗрдирдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░рдирд╛ рд╣реИ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж)ред рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╕рдВрджреЗрд╢ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдлрд▓ рдХрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред



рд╕рднреА рдЕрдЦрдВрдбрд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддрд░рд╣, рдЕрднрд┐рдХрдерди рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрд╕ рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдиреБрдореЛрджрди рдХреЗ рджреВрд╕рд░реЗ рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 1 рдореЗрдВ рджреЛ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдЪрд░ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрди рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 2 рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдЪрд░ "x:" + x + ", y:" + y рд╣реЛрдЧрд╛ ред

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

 class App { public static void f(){ int x, y; //   assert x > y; } }
      
      





рдмрд╕ рдПрдХ рдмрдпрд╛рди рдЙрд▓реНрд▓рдВрдШрди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ AsertionError рдлреЗрдВрдХ рджреЗрдВрдЧреЗ (x> y)ред

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг

 class App { public static void f(){ int x, y; //   assert x > y : "x: " +  + ", : " + ; } }
      
      





рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ AsertionError рдлреЗрдВрдХ рджреЗрдВрдЧреЗ, рдХрд╣рддреЗ рд╣реИрдВ, "x: 0, y: 123" рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЧрдгрдирд╛ рдХреЗ рд╕рдордп x рдФрд░ y рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╡реИрдз рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред





рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 1 рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реВрдЪреА рдореЗрдВ рдиреНрдпреВрдирддрдо рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдерди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрдпрдирд┐рдд рддрддреНрд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреНрдпреВрдирддрдо рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдерди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ "рдорд╣рдВрдЧреА" рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЦрд╝рд░рд╛рдм рди рдХрд░реЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡реЗ рдЕрдХреНрд╖рдо рд╣реИрдВред рдЕрдиреБрдореЛрджрди рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд╛рдирд┐ рдкреВрд░реА рддрд░рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╡реЗ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдмрдпрд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ: рджрд╛рд╡реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ ред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
ArrayUtils.min (int []] рд╡рд┐рдзрд┐ рдореЗрдВ, рдкреЛрд╕реНрдЯ-рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рджреЛ рдЪреЗрдХ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рджреЛрдиреЛрдВ рдиреНрдпреВрдирддрдо рддрддреНрд╡ (O (N)) рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рд╕рд░рд╛рд╣рдиреАрдп рд╣реИрдВ

 public class ArrayUtils { public static int min(int[] array) { int min; //     //  min -    array assert checkMin(array, min); assert checkContains(array, min); return min; } // ,        private static boolean checkMin(int[] array, int min) { for (int elem : array) { if (elem < min) { return false; } } return true; } // ,     "" private static boolean checkContains(int[] array, int min) { for (int elem : array) { if (elem == min) { return true; } } return false; } }
      
      







рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
рдЦрд╛рд▓реА рдСрдкрд░реЗрдЯрд░, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо" (;)

 public class App { public static void main(String[] args) { ;;;; ;;;;;;;; ;;; ;; ;;; ;;;;;;;;;; ;; ;; ;;;;;;;; ;;;; for (int k = 0; k < 10; k++) { ; } } }
      
      









рдЬрд╛рд╡рд╛ рдореЗрдВ рдореБрдЦрд░ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рджреЗрдЦреЗрдВред





рдХреЛрдб рдореЗрдВ рдПрдВрдмреЗрдбрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕



рдРрд╕реА рдХрдИ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд╣рд╛рдБ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:





рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рднреА рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:



рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ (рджреБрд╖реНрдкреНрд░рднрд╛рд╡) - рдХреЛрдИ рднреА рдХреНрд░рд┐рдпрд╛ рдЬреЛ "рджреГрд╢реНрдпрдорд╛рди рджреБрдирд┐рдпрд╛" рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИред

рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ

tmp x = 1 + 2 + 3;

рдпрд╣ "рджреГрд╢реНрдпрдорд╛рди рджреБрдирд┐рдпрд╛" рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рдиреАрдЪреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ tmp рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рд╣рд╛рд▓рд╛рдВрдХрд┐ "рдЕрджреГрд╢реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд░реНрд▓реНрдб" рдмрджрд▓ рдЧрдпрд╛ рд╣реИ (рдмрд╛рдпрдЯреЗрдХреЛрдбреНрд╕ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИ, рдкреНрд░реЛрд╕реЗрд╕рд░ 1, 2 рдФрд░ 3 рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ)



рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди

System.out.println ("рд╣реИрд▓реЛ!");

"рджреГрд╢реНрдпрдорд╛рди рджреБрдирд┐рдпрд╛" рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ (рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕) - рдЗрд╕ рддрд░рд╣ рдХреА рд░реЗрдЦрд╛ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ "рдЕрдзрд┐рдХ" рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╣рдо рдкрдврд╝реЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред



рд▓реЗрдХрд┐рди рд░реЗрдЦрд╛

tmp = 2 * tmp;

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕) рдЕрдЧрд░ рд╣рдо рдиреАрдЪреЗ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ tmp рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред







рдЖрдВрддрд░рд┐рдХ рдЖрдХреНрд░рдордгрдХрд╛рд░реА


рднрд╛рд╖рд╛ рдореЗрдВ рдмрдпрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ "рд░рд╛рдЬреНрдп" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдлрд┐рд╕-рд╣рдиреАрдл-тАж рдХреА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПтАжред рдкрд╣рд▓реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдерд╛:

 if (i % 3 == 0) { ... } else if (i % 3 == 1) { ... } else{ //    (i % 3 == 2) ... }
      
      





рдЕрдм "рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рддреНрдп рдХрдерди" рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:

 if (i % 3 == 0) { ... } else if (i % 3 == 1) { ... } else { assert i % 3 == 2 : i; ... }
      
      





рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрдерди 'i' рдЛрдгрд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐% рдСрдкрд░реЗрдЯрд░ рд╢реЗрд╖ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ


рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рдЙрдореНрдореАрджрд╡рд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрднрд╛рдЧ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрднрд╛рдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреЗрд╕ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣рдореЗрд╢рд╛ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдХрд┐ рдПрдХ рдЪрд░ рдореЗрдВ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рдорд╛рди рд╣реЛрдЧрд╛, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХрд╛рд░реНрдб рдЧреЗрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдирд┐рдореНрди рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

 switch(suit) { caseSuit.CLUBS: //  ... break; caseSuit.DIAMONDS: //  ... break; caseSuit.HEARTS: //  ... break; caseSuit.SPADES: //  ... }
      
      





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

 default: assert false : suit;
      
      





рдпрджрд┐ рдЪрд░ рдХрд╛ рд╕реЗрдЯ рдПрдХ рдЕрд▓рдЧ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЕрднрд┐рдХрдерди рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрднрд┐рдХрдерди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬреЛрд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛:

 default: throw new AssertionError(suit);
      
      





рдпрд╣ рдореБрд╣рд╛рд╡рд░рд╛ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рджрд╛рд╡реЗ рдЕрдХреНрд╖рдо рд╣реЛрдВред рдФрд░ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ: рдереНрд░реЛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдиреНрдп рд╣реИ рдЬрдм рдореБрдЦрд░ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рдПрдХ рд╡рд┐рдзрд┐ рд▓реМрдЯрд╛рддреА рд╣реИ, рддреЛ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рд┐рдЪ рдХреЗ рдмрд╛рдж рдХреЛрдИ рд░рд┐рдЯрд░реНрди рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрдХрд▓рди рд╣реИ

 public class App { public static int twice(int arg) { switch (arg) { case 0: return 0; case 1: return 2; case 2: return 4; case 3: return 6; default: throw new AssertionError(arg); } } }
      
      





рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдирд╣реАрдВ рд╣реИ

 class App { public static int twice(int arg) { switch (arg) { case 0: return 0; case 1: return 2; case 2: return 4; case 3: return 6; default: assert false : arg; } } } COMPILATION ERROR: Missing return statement
      
      











рд░рди-рдЯрд╛рдЗрдо рдЖрдХреНрд░рдордгрдХрд╛рд░реА




рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рди рдХреЗрд╡рд▓ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдзрд╛рдЧреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдСрд░рд┐рдЬрдирд▓ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рд╢рд╛рдпрдж рдпрд╣ рдорд╛рдирд╛ рдХрд┐ рди рдХреЗрд╡рд▓ рд╕реВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЪрд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ рд╡реИрд▓реНрдпреВ рд╣реЛрдЧреА, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рд╣рдо рдХреЗрд╕ рдХреЗ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдПрдХ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдХрд╣реАрдВ рднреА рдЙрд╕ рдХрдерди рдХреЛ рд░рдЦреЗрдВ рдЬрд╣рд╛рдВ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 assert false;
      
      





рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рд╣реИ:

 void foo() { for (...) { if (...) {return;} ... } //      !!! }
      
      





рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ:

 void foo() { for (...) { if (...) {return;} } assert false; //      !!! }
      
      







рдиреЛрдЯ: рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд░реЗрдВред рдпрджрд┐ рд░рд╛рдЬреНрдп рдЬрд╛рд╡рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрджрд┐ рдЖрдк рдХрдерди рдХреЛ рд╡рд╣рд╛рдБ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдлрд┐рд░, рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╕рд┐рд░реНрдл рдПрдХ рдЬреЛрд░ рд▓рдЧрд╛рдирд╛ рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
рдЬрд╛рд╡рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдВрдХрд▓рдХ рдХреЛ "рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛" рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ "рджреБрд░реНрдЧрдо" рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛: рдХрдердиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреЛ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ

 public class App { public static void main(String[] args) { return; return; //    } } >> COMPILATION ERROR: Unreachable statement
      
      





рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ "рдЫрд▓" рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

 public class App { public static void main(String[] args) { if (true) {return;} return; //   ,    } }
      
      











Preconditions, postconditions (рдкреЛрд╕реНрдЯрдХрдВрдбрд┐рд╢рди) рд╡рд░реНрдЧ рдЖрдХреНрд░рдордгрдХрд╛рд░реА




рдЬрдмрдХрд┐ рдореБрдЦрд░ рдирд┐рд░реНрдорд╛рдг рдбрд┐рдЬрд╛рдЗрди-рдмрд╛рдп-рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдбрд┐рдЬрд╛рдЗрди-рдмрд╛рдп-рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрднрд╛рдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП







рдкреВрд░реНрд╡ рд╢рд░реНрдд (рдкреВрд░реНрд╡ рд╢рд░реНрдд)


рдЕрдзрд┐рд╡реЗрд╢рди рджреНрд╡рд╛рд░рд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкреВрд░реНрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╡рд┐рд╢рд┐рд╖реНрдЯ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ рдЪреЗрдХ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 /** *    (refresh rate). * * @param rate  ,     . * @throws IllegalArgumentException  (rate <= 0)  (rate > MAX_REFRESH_RATE). */ public void setRefreshRate(int rate) { //       if (rate <= 0 || rate > MAX_REFRESH_RATE) throw new IllegalArgumentException("Illegal rate: " + rate); setRefreshInterval(1000 / rate); }
      
      





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



рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдПрдХ рдЧреИрд░-рдЧрдгрди рд╡рд┐рдзрд┐ рдХреА рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЖрдк рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдЪ рд╣реЛрдЧрд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХрдерди рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд┐рд╕реЗ рдкрд┐рдЫрд▓реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 /** *    (    ) * * @param interval    . */ private void setRefreshInterval(int interval) { //     (nonpublic)  assert (interval > 0) && (interval <= 1000 / MAX_REFRESH_RATE) : interval; ... //    }
      
      





рдиреЛрдЯ: рдпрджрд┐ MAX_REFRESH_RATE 1000 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЕрдкрдбреЗрдЯ рджрд░ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрдерди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рддреНрд░реБрдЯрд┐ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ!





рд▓реЙрдХ-рд╕реНрдерд┐рддрд┐ рдкреВрд░реНрд╡ рд╢рд░реНрдд




рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдпрдГ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдХреБрдЫ рддрд╛рд▓реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рджреЗрдЦрдирд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ:

 privateObject[] a; public synchronized int find(Object key) { return find(key, a, 0, a.length); } / /    -   c      private int find(Object key, Object[] arr, int start, int len) { ... }
      
      





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

 / /         : private int find(Object key, Object[] arr, int start, intlen) { assert Thread.holdsLock(this); // lock-status assertion ... }
      
      





рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдПрдХ рдмрдпрд╛рди рд▓рд┐рдЦрдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЙрдХ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ !

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
Java.util.concurrent рд╕реЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЬрд╛рдВрдЪ рд╕рдВрднрд╡ рд╣реИ:

ReentrantLock.isHeldByCurrentThread () - рд╕рдЯреАрдХ рд╕рдордХрдХреНрд╖

ReentrantReadWriteLock.isWriteLockedByCurrentThread () - рд╕рдЯреАрдХ рдПрдирд╛рд▓реЙрдЧ

Semaphore.availablePermits () - рд╕рдорд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

...







Postconditions (postconditions)




рдЖрдк рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдЧреИрд░-рдЧрдгрддрд╛рдВрддреНрд░рд┐рдХ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЛрд╕реНрдЯрдХрдВрдбрд┐рд╢рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдПрдХ рдмрдпрд╛рди рдХреЗ рдмрд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ:

рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп (рдпрд╣ -1 рдореЙрдб рдореА) BigInteger рд▓реМрдЯрд╛рддрд╛ рд╣реИред

  /** * @param m  * @return this^(-1) mod m. * @throws ArithmeticException  m <= 0   BigInteger *       * mod m ( BigInteger    m). */ public BigInteger modInverse(BigInteger m) { if (m.signum <= 0) { throw new ArithmeticException("Modulus not positive: " + m); } ... //   assert this.multiply(result).mod(m).equals(ONE) : this; return result; }
      
      





рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
рдмреАрдЬрдЧрдгрд┐рдд рдХрд╛ рдПрдХ рдмрд┐рдЯ: рдмреЗрд╕ рдПрди (рдЬреЗрдб рдПрди ) рдкрд░ рдЕрд╡рд╢реЗрд╖реЛрдВ рдХреА рдПрдХ рдЕрдВрдЧреВрдареА рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рдПрдЬрд╝рд░реЛ рддрддреНрд╡ x рдореЗрдВ (рдФрд░ рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ, рдПрдХ рд╡рд┐рд▓рдХреНрд╖рдг) рд╡реНрдпреБрддреНрдХреНрд░рдо рддрддреНрд╡ рд╣реИ, рдпрджрд┐ x рдХрд╛ рдПрди рдХреЗ рд╕рд╛рде рд╕рд╣рд╕рдВрдмрдВрдз рд╣реИред рдпрджрд┐ x рдХрд╛ рдПрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдкрд░рд╛рдз рдирд╣реАрдВ рд╣реИ, рддреЛ x рдХрд╛ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИред



рдЙрджрд╛рд╣рд░рдг # 1 (рд░рд┐рдВрдЧ Z 5 рдореЗрдВ рдЙрд▓реНрдЯрд╛):

1 рдХреЗ рд▓рд┐рдП - рдЙрд▓рдЯрд╛ = 1, 1 * 1 рдореЙрдб 5 = 1

2 рдХреЗ рд▓рд┐рдП - рдЙрд▓рдЯрд╛ = 3, 2 * 3 рдореЙрдб 5 = 1

3 рдХреЗ рд▓рд┐рдП - рдЙрд▓рдЯрд╛ = 2, 3 * 2 рдореЙрдб 5 = 1

4 рдХреЗ рд▓рд┐рдП - рдЙрд▓рдЯрд╛ = 4, 4 * 4 рдореЙрдб 5 = 1



рдЙрджрд╛рд╣рд░рдг # 2 (рд░рд┐рдВрдЧ рдЬреЗрдб 6 рдореЗрдВ рдЙрд▓реНрдЯрд╛):

1 рдХреЗ рд▓рд┐рдП - рдЙрд▓рдЯрд╛ = 1, 1 * 1 рдореЙрдб 6 = 1

2 рдХреЗ рд▓рд┐рдП - рдХреЛрдИ рд╡рд╛рдкрд╕реА рдирд╣реАрдВ

3 рдХреЗ рд▓рд┐рдП - рдХреЛрдИ рд╡рд╛рдкрд╕реА рдирд╣реАрдВ

4 рдХреЗ рд▓рд┐рдП - рдХреЛрдИ рд╡рд╛рдкрд╕реА рдирд╣реАрдВ

5 рдХреЗ рд▓рд┐рдП - рдЙрд▓рдЯрд╛ = 5, 5 * 5 рдореЙрдб 6 = 1



232.x

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

  void foo(int[] array) { //     ... //          int- //    ,     }
      
      







рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯрдСрдкреНрд╢рди рдХреЗ рдкрд╛рдард╛рддреНрдордХ рдХрдерди рдХреЛ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ" рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ:

 void foo(final int[] array) { //  (inner)         class DataCopy { private int[] arrayCopy; DataCopy() { arrayCopy = (int[]) array.clone();} boolean isConsistent() {return Arrays.equals(array, arrayCopy);} } DataCopy copy = null; //  ;         assert ((copy = new DataCopy()) != null); ... //    array // ,   array   assert copy.isConsistent(); }
      
      





рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдЖрдЗрдЯрдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдордирдорд╛рдиреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдХрдерди (рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 copy = new DataCopy();
      
      





рдпрд╣ рдордд рдХрд░реЛред рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдХрдердиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╕рд░рдгреА рдХреЛ рдХреЙрдкреА рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЙрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХрд┐рд╕реА рднреА рдХреАрдордд рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдирд╛ рдЪрд╛рд╣рд┐рдПред





рд╡рд░реНрдЧ рдХреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░реА




рдХреНрд▓рд╛рд╕ рдЗрдиреНрд╡реИрд░рд┐рдПрдВрдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдЖрдХреНрд░рдордгрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рд░ рд╕рдордп рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╕реБрд╕рдВрдЧрдд рдЕрд╡рд╕реНрдерд╛ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрдЧ рдЖрдХреНрд░рдордгрдХрд╛рд░реА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреА рд╕рдВрддреБрд▓рд┐рдд рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╡рд░реНрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдкреЗрдбрд╝ рд╕рдВрддреБрд▓рд┐рдд рдФрд░ рдареАрдХ рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдореБрдЦрд░ рддрдВрддреНрд░ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╢реИрд▓реА рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЬреЛрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрддреБрд▓рд┐рдд рд╡реГрдХреНрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрддреБрд▓рд┐рдд рд╣реИ:

 //  true     private boolean balanced() { ... }
      
      





рдЪреВрдБрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╛рдзрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕реА рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 assert balanced();
      
      





рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рд╕рдорд╛рди рдЪреЗрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдЧрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдореЗрдореЛрд░реА рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдмрдЧ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЬрд╛рд╡рд╛ "рд╣реАрдк" ("рджреЗрд╢реА рдкреАрдпрд░") рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд╣рд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧреА рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рд╣реБрдЖ рд╣реИред

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




рдХрдХреНрд╖рд╛ рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдкрджреНрдзрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рддрд╛рдХрд┐ рд░рд╛рдЬреНрдп рд╕реАрдзреЗ рдЕрдиреНрдп рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рди рджреЗ!

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
┬л ┬╗ ( ) ┬л ┬╗ . . ┬л┬╗ , ┬л┬╗ - , .







рдЙрдиреНрдирдд рддрдХрдиреАрдХ



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧ рдЙрди рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рджрд╛рд╡реЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ - рджрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ ред



рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рджрд╛рд╡реЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛


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



рдХреНтАНрд▓рд╛рд╕ рдореЗрдХреЗрдирд┐рдЬреНрдо рдХреНтАНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╕рдорд░реНрдерди рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ "рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди" рдХреЗ рдореБрд╣рд╛рд╡рд░реЗ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрд╛рд╡рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ рдФрд░ рд╕рдВрдХрд▓рдХ рдХреЛ рдЙрддреНрдкрдиреНрди рд╢реНрд░реЗрдгреА рдХреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рднреА "рд╕рдВрджрд░реНрднреЛрдВ" рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  static final boolean asserts = ... ; // false    if (asserts) assert <expr> ;
      
      





рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
┬л ┬╗ . :

┬лAn optimizing compiler may realize that the statementтАж will never be executed and may choose to omit the code for that statement from the generated class file ...┬╗


( , ) javac ┬лoptimizing compiler┬╗,

 public class App { static final boolean asserts = false; public static void main(String[] args) { //   if (asserts) { //  B } //  C } }
      
      







 public class App { static final boolean asserts = false; public static void main(String[] args) { //   //  C } }
      
      









рджрд╛рд╡рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ


рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рд╕реНрдЯреЗрдЯрд┐рдХ-рдмреЗрд╕реНрдб рдЕрдкреНрд░реЛрдЪ рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЙрд╕рдХреЗ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЛ рдбрд┐рд╕реЗрдмрд▓ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 static { boolean assertsEnabled = false; assert assertsEnabled = true; //   !!! if (!assertsEnabled) throw new RuntimeException("   !!!"); }
      
      





рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЗрд╕ рд╕реНрдерд┐рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рд░рдЦреЗрдВред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
┬л ┬╗ , тАФ . рдпрд╛рдиреА

 class App { static int x = f(); static { System.err.println("static{}"); } static int y = g(); static { boolean assertsEnabled = false; assert assertsEnabled = true; if (!assertsEnabled) throw new RuntimeException(); } public static void main(String[] args) {} static int f() { System.err.println("f()"); return 0; } static int g() { System.err.println("g()"); return 0; } } >> f() >> static{} >> g() >> Exception in thread "main" java.lang.ExceptionInInitializerError >> ...
      
      





.







рджрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди



Javac рд╕рдВрдХрд▓рдХ рдХреЛ рдмрдпрд╛рди рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ -source 1.4 рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ :

 javac -source 1.4 MyClass.java
      
      





рдпрд╣ рдзреНрд╡рдЬ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрддрд░ рдкрд░ рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рди рд╣реЛред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
javac (-source -target)

javac -source 1.3 -target 1.4

class-. , . рдпрд╛рдиреА , Java 5 Java 1.3, - Java 1.4.

1.3 , , assert , generics, varargs,тАж

class- 1.4 , , class- Java 1.4. class- (minor_version, major_version)

 ClassFile { ... u2 minor_version; u2 major_version; ... }
      
      





Oracle's Java Virtual Machine implementation in JDK release 1.0.2 supports class file format versions 45.0 through 45.3 inclusive. JDK releases 1.1.* support class file format versions in the range 45.0 through 45.65535 inclusive. For k тЙе 2, JDK release 1.k supports class file format versions in the range 45.0 through 44+k.0 inclusive.








рджрд╛рд╡реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдирд╛



рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рджрд╛рд╡реЗ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрд╡рд┐рдЪ рд╣реИрдВред

рд╡рд┐рд╕реНрддрд╛рд░, рдЙрдкрдпреЛрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЕрдиреБрдореЛрджрди рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -enableassertions рдпрд╛ -ea ред рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, -disableassertions рдпрд╛ -da рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЖрдк рдзреНрд╡рдЬ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:







рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗрд╡рд▓ рдХреЙрдо . wombat.fruitbat рдкреИрдХреЗрдЬ рдФрд░ рдЙрд╕рдХреЗ рдЙрдк- рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рджрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдмреИрдЯрдЯреНрдпреВрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ :

 java -ea:com.wombat.fruitbat... BatTutor
      
      







рдпрджрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдХрдИ рдРрд╕реЗ "рд╕реНрд╡рд┐рдЪ" рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб com.wombat.fruitbat рдкреИрдХреЗрдЬ рдХреЗ рджрд╛рд╡реЗ рдХреЗ рд╕рд╛рде рдмреИрдЯрдЯреНрдпреВрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди com.wombat.fruitbat.Brickbat рд╡рд░реНрдЧ рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде :

 java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat BatTutor
      
      







рдЙрдкрд░реЛрдХреНрдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЭрдВрдбреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рднреА рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреНрд░рдгрд╛рд▓реА ClassLoader рд╣реИред рдЕрдкрд╡рд╛рдж рдЪрд┐рдВрддрд╛рдПрдВ рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рд┐рдЪ рдХрд░рддреА рд╣реИрдВ, рдЬреЛ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рд╕рд┐рд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЕрдиреБрдореЛрджрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред



рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: -enablesystemassertions рдпрд╛ -esa ред рдЗрд╕реА рддрд░рд╣, рд╕рд┐рд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЛ рдбрд┐рд╕реЗрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -disablesystemassertions рдпрд╛ -dsa рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХрдорд╛рдВрдб рдиреЗ рдмреИрдЯрдЯреНрдпреВрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреНрд▓рд╛рд╕ рдФрд░ com.wombat.fruitbat рдкреИрдХреЗрдЬ рдФрд░ рдЙрд╕рдХреЗ рдЙрдк рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рджрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛:

 java -esa -ea:com.wombat.fruitbat...
      
      







рдЬрд┐рд╕ рд╕рдордп рдХрдХреНрд╖рд╛ рдЖрд░рдВрднреАрдХреГрдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рддрдм рддрдХ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ, рддрдм рд╡рд░реНрдЧ (рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж) рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЛрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдЖрд░рдВрдн рд╕реЗ рдкрд╣рд▓реЗ рддрд░реАрдХреЛрдВ рдпрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реНрдереИрддрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрдХреНрд░реАрдп рд╣реИред



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

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
:

An assert statement that is executed before its class has completed initialization is enabled.



This rule is motivated by a case that demands special treatment. Recall that the assertion status of a class is set no later than the time it is initialized. It is possible, though generally not desirable, to execute methods or constructors prior to initialization. This can happen when a class hierarchy contains a circularity in its static initialization, as in the following example:

 public class Foo { public static void main(String[] args) { Baz.testAsserts(); // Will execute after Baz is initialized. } } class Bar { static { Baz.testAsserts(); // Will execute before Baz is initialized! } } class Baz extends Bar { static void testAsserts() { boolean enabled = false; assert enabled = true; System.out.println("Asserts " + (enabled ? "enabled" : "disabled")); } } >> Asserts enabled >> Asserts disabled
      
      





Invoking Baz.testAsserts() causes Baz to be initialized. Before this can happen, Bar must be initialized. Bar's static initializer again invokes Baz.testAsserts(). Because initialization of Baz is already in progress by the current thread, the second invocation executes immediately, though Baz is not initialized (┬з12.4.2).



Because of the rule above, if the program above is executed without enabling assertions.







рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛



рдЬрд╛рд╡рд╛ рдореЗрдВ рдореБрдЦрд░ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ ( .class рдлрд╝рд╛рдЗрд▓реЛрдВ) рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ ред рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдРрд╕реА рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдХрдерди рдЙрд╕ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рд╕рдВрдХрд▓рдХ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:



рдЬрдм рддрдХ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ -source 1.4 рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдореЛрдб 1.4 рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ , рд╕рдВрдХрд▓рдХ рд╕реНрд░реЛрдд рдореЛрдб 1.3 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкреБрд░рд╛рдиреЗ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп (рдпрд╛рдиреА, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ ) рдХреЛ рд╕рдмрд╕реЗ рдЕрдиреБрдХреВрд▓ рд╕рдВрдЧрддрддрд╛ рдореЛрдб рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрд░реЛрдд рдореЛрдб 1.3 рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
( Java 1.4), . рдпрд╛рдиреА javac JDK 7 JDK 8 , -source 1.3






рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди



рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдореБрдЦрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рд╣реЛрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ

рд╕рдВрдЧрддрддрд╛

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде

рдХреНрд▓рд╛рд╕ рдПрд╢реНрдпреЛрд░рд┐рдпрди рдЗрд░реНрд░рд░ рдХреЛ

рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рджрд╛рд╡реЗ





рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди


рдХреНрдпреЛрдВ рдореБрдЦрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖ рд╕рдорд░реНрдерди рдХреЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдореЗрдВ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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



рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ?

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рднрд╛рд╖рд╛ рдмрджрд▓рдирд╛ рдПрдХ рдЧрдВрднреАрд░ рдХрджрдо рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдЖрдИ-рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдХрдерди рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛, рддреЛ рд╡реЗ рдпрд╛ рддреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдпрд╛ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдпрд╛рдиреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдВрдЧреЗред рд╣рдо рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЗрдореНрд╕ рдЧреЛрд╕реНрд▓рд┐рдВрдЧ рдХреЗ рдореВрд▓ рдЬрд╛рд╡рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВред рд╕рдВрддреЛрд╖рдЬрдирдХ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдУрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдЖрд░реЛрдк рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рд╣реИрдВред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
Java Oak . :).




-- (design-by-contract) , , Eiffel?

рд╣рдордиреЗ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЛ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрд╛ рд╕рдХреЗ рдХрд┐ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓рд╛рд╡ рдФрд░ рдкреБрд░рд╛рдиреА рдФрд░ рдирдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ "рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░" рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рднрд╛рд╖рд╛ рдХреА рд╕рд░рд▓рддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреА рдкрд╣рдЪрд╛рди рд╣реИред рдирддреАрдЬрддрди, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд╢рд░реНрдд рдмрдпрд╛рди (рдмреВрд▓рд┐рдпрди рдЕрднрд┐рдХрдерди рд╕реБрд╡рд┐рдзрд╛) рдПрдХ рдХрд╛рдлреА рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ рдФрд░ рдмрд╣реБрдд рдХрдо рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╕рд╢рд░реНрдд рдмрдпрд╛рди рдЬреЛрдбрд╝рдирд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди-рдмрд╛рдп-рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдерди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди-рдмрд╛рдп-рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЗ рд╕реАрдорд┐рдд рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЦрд░ рдЖрдВрддрд░рд┐рдХ (nonpublic) рдкреВрд░реНрд╡ рд╢рд░реНрдд, рдкреЛрд╕реНрдЯрдХреЙрдиреНрдбрд┐рд╢рди, рдФрд░ рд╡рд░реНрдЧ рдХреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдмрд╛рд╣рд░реА (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рдкреВрд░реНрд╡ рд╢рд░реНрдд рдЬрд╛рдБрдЪ рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЬрд╛рдБрдЪ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдХрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдкрд╡рд╛рджреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ IllegalArgumentException рдФрд░ IllegalStateException рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреА рд╣реИред



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

рдЗрд╕ рддрд░рд╣ рдХреА рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬрдЯрд┐рд▓ рдЗрдирд▓рд╛рдЗрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред





рдЕрдиреБрдХреВрд▓рддрд╛


рдХреНрдпрд╛ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджрд╛ рдмрди рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ 'рдЬреЛрд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

рд╣рд╛рдВ, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рд╕реНрддрд░ рдкрд░ (рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ 'рдореБрдЦрд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред) рд╕рдВрдХреНрд░рдордг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдВрдХреНрд░рдордг рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ 'рдореБрдЦрд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред



рдХреНрдпрд╛ рдпрд╣ рдЙрдкрдХрд░рдг рдХреНрд▓рд╛рд╕ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрдиреНрдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреБрд░рд╛рдиреЗ JRE рдкрд░ рдирд╣реАрдВ рдЪрд▓рд╛рдИ рдЬрд╛ рд╕рдХрддреАрдВ?

рд╣рд╛рдБ, рдпрд╣ рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ ClassLoader рдХреЗ рдирдП рддрд░реАрдХреЗ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдЬреИрд╕реЗ рдХреНрд▓рд╛рд╕ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреАредред рдпрджрд┐ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХреЙрд▓ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ-рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреБрд░рд╛рдиреЗ JRE (рдЬрд┐рд╕рдХреЗ рд╡рд░реНрдЧ ClassLoader рдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВ) рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ NoSuchMethodError рдлреЗрдВрдХ рджреЗрдЧрд╛ ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИ рдЬрдм рднрд╛рд╖рд╛ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред





рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 2 рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рд╣реИ ?

рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдордирдорд╛рдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХрд▓реНрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдХрдерди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ System.out.println (...) рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ "рдорд╣рд╕реВрд╕" рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рд╡рд╛рдВрдЫрдиреАрдп рд▓рдЧрддрд╛ рд╣реИред





рдХрдХреНрд╖рд╛ рдЬреЛрд░


рдЬрдм рдПрдХ рдЕрднрд┐рдХрдерди рдПрдХ рдмрдпрд╛рди рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 2 рдЧрд╛рдпрдм рд╣реИ , рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рд╕реНрддреГрдд рдкрд╛рда рд╕рдВрджреЗрд╢ рдореЗрдВ рдХрдерди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдКрдВрдЪрд╛рдИ <рдореИрдХреНрд╕рд╣рд╛рдЗрдЯ" ?

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



рдХреНрдпреЛрдВ AssertionError рд╡рд╕реНрддреБ рд╣реИ, рдЬреЛ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рджрд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдХрдерди рд╕реЗ рдПрд╕реНрдЯрд░рд┐рдпрди рдПрд░реНрд░рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдиреА рд╡рд╕реНрддреБ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ (рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдХреЗ рдмрдЬрд╛рдп?

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



рдХреНрдпреЛрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд╣реБрдБрдЪ рдХреЗ рддрд░реАрдХреЗ (рдЬреИрд╕реЗ getFile () , getLine () , getMethod () ) AsErionError рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ?

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдереНрд░реЛрдПрдмрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЬреЛрд░рджрд╛рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Throwable.getStackTrace () рдкрд░ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
( assert AssertionError ) , Throwable.getStackTrace() тАФ 1.4.

++- Throwable AssertionError.



рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА


 public class App { public static void main(String[] args) { try { f(); } catch (Throwable t) { StackTraceElement[] stack = t.getStackTrace(); StackTraceElement frame = stack[0]; System.out.println("FileName: " + frame.getFileName()); System.out.println("ClassName: " + frame.getClassName()); System.out.println("MethodName: " + frame.getMethodName()); System.out.println("LineNumber: " + frame.getLineNumber()); } } public static void f() { throw new RuntimeException(); } } >> FileName: App.java >> ClassName: App >> MethodName: f >> LineNumber: 16
      
      









AssertionError Error , RuntimeException ?

рдпрд╣ рдПрдХ рдореВрдЯ рдкреНрд╡рд╛рдЗрдВрдЯ рд╣реИредрд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдиреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдкреВрд░реНрд╡рдЬ рд╣реИ ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЦрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдпрд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЗрдирдХрд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо "рдПрдХ рдЕрдЬреНрдЮрд╛рдд рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ" ("рдЬреНрдЮрд╛рдд рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд╣рд░") рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдШрд╛рддрдХ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдиреНрд╡реЗрдВрд╢рди рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдорддрд▓рдм рдЕрдкрд╡рд╛рдж рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА , рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ ), рдЬрд┐рд╕реЗ рд╡реЗ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ ( @throws)javadoc рдореЗрдВ)ред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдпрд╣ рдЬреЛрд░рджрд╛рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рддрдХ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
┬лHow to Write Doc Comments for the Javadoc Tool┬╗ ┬лDocumenting Exceptions with @throws Tag┬╗ .







рджрд╛рд╡реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдирд╛


рдЕрдзрд┐рдХ рдкрд░рдВрдкрд░рд╛рдЧрдд рдкреИрдХреЗрдЬ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрдЬрд╛рдп рдкреИрдХреЗрдЬ-рдЯреНрд░реА рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдпрд╛рди рдХреНрдпреЛрдВ рдЖрддреЗ рд╣реИрдВ?

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

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
Java, ( ).

: .

рдпрд╛рдиреА aaa.bbb.ccc ┬л┬╗ aaa.bbb xxx.yyy.zzz . (public, protected, (package private), private) : . ┬л ┬╗.



Swing

 javax.swing.* javax.swing.border.* javax.swing.colorchooser.* javax.swing.event.* javax.swing.filechooser.* javax.swing.plaf.* javax.swing.plaf.basic.* javax.swing.plaf.metal.* javax.swing.plaf.multi.* javax.swing.plaf.nimbus.* javax.swing.plaf.synth.* javax.swing.table.* javax.swing.text.* javax.swing.text.html.* javax.swing.text.html.parser.* javax.swing.text.rtf.* javax.swing.tree.* javax.swing.undo.* javax.swing.* javax.swing.*
      
      





-- javax.swing.* .





рдпрджрд┐ рдХреЛрдИ рдЕрдиреБрдореЛрджрди рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдпрджрд┐ рд╡рд░реНрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд░рдВрднрд┐рдХ рд╣реИ) рддреЛ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реЗрдЯ рдХреНрд▓реИрд╕реИрд╕реЗрд░реНрд╕рд┐рдпрдирд╕реНрдЯреИрдЯрд╕ () рдПрдХ рдмреВрд▓рд┐рдпрди рдХреЛ рдХреНрдпреЛрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ ?

рдпрджрд┐ рдЭрдВрдбрд╛ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ (рд╕рдВрднрд╡рддрдГ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдЖрд╡рд╢реНрдпрдХ рдпрд╛ рд╡рд╛рдВрдЫрд┐рдд рдирд╣реАрдВ рд╣реИред рдЕрдкрд╡рд╛рдж рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рднрд╛рд░реА рд▓рдЧрддрд╛ рд╣реИред



рджреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡рд┐рдзрд┐ рдирд╛рдо рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛: setDefaultAssertionStatus () рдФрд░ setAssertionStatus () ?

рдирд╛рдордХрд░рдг рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдЖрдо рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдкрджреНрдзрддрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рднреНрд░рдо рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред



рдХреНрдпреЛрдВ рд╡рд╛рдВрдЫрд┐рддреЛрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рди рдХрд░реЗрдВрддрдм рддрдХ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдлреНрд░реЗрдВрдбрд▓реА" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдпрд╛рди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ рдЬрдм рдХрдХреНрд╖рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд░рдореНрдн рдХреА рдЬрд╛рддреА рд╣реИ?

рдпрд╣ рдЕрднреА рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдкрджреНрдзрддрд┐ рдХрд╛ рдХреЛрдИ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдЕрдзрд┐рдХ рдзреАрдореА рдФрд░ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдПрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП



рдХреЛрдИ RuntimePermission рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ ?

рдпрджреНрдпрдкрд┐ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рд╕рд▓реЗрдЯреИрдбрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдкреНрд▓реЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИрдмрдпрд╛рдиреЛрдВ рдХреЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ / рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдРрд╕реА рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд▓рдЧрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдкреНрд▓реЗрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдПрдХ рдЖрд╕рд╛рди рдЗрдирдХрд╛рд░-рд╕реЗрд╡рд╛-рд╕реЗрд╡рд╛ рд╣рдорд▓рд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рднреА рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓реЗрдЯ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рд╕ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдПрдкреНрд▓реЗрдЯ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ RuntimePermission рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ ( getClassLoader ) рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ ред

рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА
┬л┬╗ Java.

java.lang.SecurityManager ( тАФ , тАФ ) RuntimePermission , тАФ .

 //   "" public class App { public static void main(String[] args) { while (true); } }
      
      





 //   -  public class App { public static void main(String[] args) { new Thread(new Runnable() { public void run() { System.exit(123); } }).start(); while (true); } } >> Process finished with exit code 123
      
      





 //      System.exit(123); //         ... ""! public class App { public static void main(String[] args) { System.setSecurityManager(new SecurityManager() { public void checkExit(int status) { throw new SecurityException("You haven't permission to exit."); } }); new Thread(new Runnable() { public void run() {System.exit(123);} }).start(); while (true); } }
      
      







/ , , .

 public class App { public static void main(String[] args) { ClassLoader loader = App.class.getClassLoader(); loader.setDefaultAssertionStatus(true); loader.setPackageAssertionStatus("", true); } }
      
      





SecurityException

 grant { permission java.lang.RuntimePermission "getClassLoader"; };
      
      





java.policy





рдХреНрдпреЛрдВ рдирд╣реАрдВ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ "рдЖрд╕рдкрд╛рд╕" рд╡рд░реНрдЧ рдХреЗ рдЕрдиреБрдореЛрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░реЗрдЧрд╛?

рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдмрдпрд╛рди рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдмреБрд░реЗ рдлреИрд╕рд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХреЛ рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 boolean assertsEnabled = false; assert assertsEnabled = true; //   !!! / /  assertsEnabled     
      
      







рдХреНрд▓рд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдореБрдЦрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

рдмрд╣реБрдд рдХрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрд╕рдХреЗ рдЖрд░рдВрдн рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдЖрдХреНрд░рдордгрдХрд╛рд░реА рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрдиреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЧрдВрднреАрд░ рдФрд░ рд╕реВрдХреНрд╖реНрдо рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдмрдпрд╛рди рд╕реЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реБрдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЙрди рд╕рднреА рдХрдердиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдРрд╕реА рдЧреИрд░-рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред



рд╕рдВрдкрд░реНрдХ рд╡рд┐рд╡рд░рдг





рдореИрдВ рдЬрд╛рд╡рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдСрдирд▓рд╛рдЗрди рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣рд╛рдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд╛рдареНрдпрдХреНрд░рдо рд╣реИрдВ ) рдФрд░ рдЬрд╛рд╡рд╛ рдХреЛрд░ рдХреЛрд░реНрд╕ рдХреЗ рд░реАрдбрд┐рдЬрд╛рдЗрди рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдЖрдк YouTube рдЪреИрдирд▓ рдкрд░ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреА рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪреИрдирд▓ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рдмреЗрд╣рддрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред



рд╕реНрдХрд╛рдЗрдк: рдЧреЛрд▓реЛрд╡рдЪрдХреНрд░реНрд╕

рдИрдореЗрд▓: GolovachCourses@gmail.com



All Articles