2 "рд╕рд░рд▓" рдЬрд╛рд╡рд╛ рдкреНрд░рд╢реНрди


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

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

рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ 2 рдФрд░ рдХрд╛рд░реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ (рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрд╛рдХрдд рдирд╣реАрдВ рдереАред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред)

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


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


рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрдерд┐рддрд┐


1. рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдорд╛рдл рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

public class A { public static class X { public static class Y { public static String Z = "life is good"; } public static CY; } public static class C { public static String Z = "life is pain"; } public static void main(String[] args) { System.out.println(XYZ); } } 

рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
  1. рд╕рдВрдХрд▓рд┐рдд рддреНрд░реБрдЯрд┐
  2. рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐
  3. рдЬреАрд╡рди рд▓рд╛рдПрдЧрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ
  4. рдЬреАрд╡рди рд▓рд╛рдПрдЧрд╛ рджрд░реНрдж рд╣реИ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреИрд╕реЗ, рдирд╛рдо рдмрджрд▓реЗ рдмрд┐рдирд╛, [рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдВ рдпрджрд┐ рдЙрддреНрддрд░ 1/2 рд╣реИ рдФрд░] рджреЛрдиреЛрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ?



2. рдЬреЗрдирд░рд┐рдХ рдРрд╕реЗ рдЬреЗрдирд░рд┐рдХ рд╣реИрдВ


  public class B { public static <T> T foo() { try { return (T) new Integer(42); } catch (ClassCastException e) { return (T) "habr"; } } public static void main(String[] args) { System.out.println(B.<String>foo()); } } 

рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
  1. рд╕рдВрдХрд▓рд┐рдд рддреНрд░реБрдЯрд┐
  2. рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐
  3. рдЖрдЙрдЯрдкреБрдЯ 42
  4. рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдмреНрд░




рдФрд░ рдЕрдм рд╕рд╣реА рдЙрддреНрддрд░:



1. рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдорд╛рдл рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

 public class A { public static class X { public static class Y { public static String Z = "life is good"; } public static CY; } public static class C { public static String Z = "life is pain"; } public static void main(String[] args) { System.out.println(XYZ); } } 
рдЬреАрд╡рди рд▓рд╛рдПрдЧрд╛ рджрд░реНрдж рд╣реИ
рд╕рдм рдХреБрдЫ рдЬрдВрдЧрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рд╣реИред рд╣рд╛рдВ, jls рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣рдореЗрд╢рд╛ рдореИрджрд╛рди рдкрд░ рд╣реЛрддреА рд╣реИред

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

рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╡рд┐рдзрд┐ рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЦрд░рд╛рдм рд╣реИред рдПрдХ рдирд┐рдЬреА рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛрдбрд╝реЗрдВред рдФрд░ рдЕрдм рдХрдордЬреЛрд░? (рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рд╕реНрдереИрддрд┐рдХ рдЖрдпрд╛рдд рдХреЗ рдмрд┐рдирд╛)
  public static class X { public static class Y { private Y() {} public static String Z = "life is good"; } public static CY; } 
рдЙрддреНрддрд░ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
  ((XY)null).Z; //   ,  Java. 



2. рдЬреЗрдирд░рд┐рдХ рдРрд╕реЗ рдЬреЗрдирд░рд┐рдХ рд╣реИрдВ
  public class B { public static <T> T foo() { try { return (T) new Integer(42); } catch (ClassCastException e) { return (T) "habr"; } } public static void main(String[] args) { System.out.println(B.<String>foo()); } } 
рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ , рдпрд╛ рдмрд▓реНрдХрд┐, рдПрдХ ClassCastException

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

рдХреЛрдб рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 System.out.println(B.<String>foo()); 

рд╕рдВрдХрд▓рдХ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд┐рдВрдЯрд▓рд╛рдЗрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 public void println(String x) 

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдУрд╡рд░рд▓реЛрдб рд╡рд┐рдзрд┐ рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд╕рдВрдХрд▓рди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдп рд╣реИ, рди рдХрд┐ рд░рдирдЯрд╛рдЗрдоред

рдЖрдЧреЗ рдмрдврд╝реЛред

 return (T) new Integer(42); 

рдХрд╛рд╕реНрдЯ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдРрд╕реЗ рд╕рдордп рдореЗрдВ рдЬрдм рдЬреЗрдиреЗрд░рд┐рдХ рдирд╣реАрдВ рд░рд╣ рдЬрд╛рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред рдмрд╕ рдЗрдВрдЯреЗрдЧрд░ рд▓реМрдЯ рд░рд╣рд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рд╣рдо рд╣реИрдВ - рд╣рдо рдкреНрд░рд┐рдВрдЯрдл рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЗрдВрдЯреЗрдЧрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред

рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрдХ

рд╢реАрд░реНрд╖ рдкрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд╕реНрдЯ

рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдлреЗрдВрдХреЗ (рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╛ рддреЛ рдереНрд░реЛрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рдпрд╛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ:

 public static void throwWithoutCheck(Throwable t) { //  ,  .  throwWithoutCheck(new Exception()) -   throws! } 
рдЙрддреНрддрд░ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
  private static <T extends Throwable> void castAndThrow(Throwable t) throws T { throw (T) t; } public static void throwWithoutCheck(Throwable t) { B.<RuntimeException>castAndThrow(t); } 


рдпреБрдкреАрдбреА:
рдмрд┐рдирд╛ рдЬрд╛рдБрдЪ рдХрд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЕрднреА рднреА рд╣реИрдВред рд╡реЗ рдПрдХ рдЬрд╡рд╛рдм рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдереЗ, рд▓реЗрдХрд┐рди, рдЖрдЗрдП, рдЕрдзрд┐рдХ "рдИрдорд╛рдирджрд╛рд░" рдХрд╣реЗрдВ:

 Thread.currentThread().stop(new IOException()); 

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


рдпрд╛:
 Unsafe.getUnsafe().throwException(new IOException()); 

рдпрд╣рд╛рдВ рднреА рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЕрдирд╕реЗрдл рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж mishadoff ред

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


All Articles