рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдкрд╡рд╛рдж, рднрд╛рдЧ I (рдкреНрд░рдпрд╛рд╕-рдЕрдВрдд рдореЗрдВ рдкрдХрдбрд╝)

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



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



1. рдХреАрд╡рд░реНрдб: рдХреЛрд╢рд┐рд╢, рдкрдХрдбрд╝, рдЕрдВрдд рдореЗрдВ, рдлреЗрдВрдХ, рдлреЗрдВрдХреЛ

2. рдХреНрдпреЛрдВ System.err рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, System.out рдХрд╛ рдирд╣реАрдВ

3. рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛ рдореМрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)

4. рдЧреИрд░-рдирд┐рдпрдВрддреНрд░рдг рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг

5. рдХреЛрд╢рд┐рд╢ + рдкрдХрдбрд╝ (рдкрдХрдбрд╝ - рдмрд╣реБрд░реВрдкреА)

6. try + catch + catch + ...

7.рдЯреНрд░реА + рдЖрдЦрд┐рд░

8.рдЯреНрд░реА + рдХреИрдЪ + рдЖрдЦрд┐рд░

9. рдиреЗрд╕реНрдЯреЗрдб рдХреЛрд╢рд┐рд╢ + рдкрдХрдбрд╝ + рдЕрдВрдд рдореЗрдВ





1. рдХреАрд╡рд░реНрдб: рдХреЛрд╢рд┐рд╢, рдкрдХрдбрд╝, рдЕрдВрдд рдореЗрдВ, рдлреЗрдВрдХ, рдлреЗрдВрдХреЛ



рдЬрд╛рд╡рд╛ рдПрдХреНрд╕рдХреНрд▓реВрдЬрди рдореЗрдХреЗрдирд┐рдЬреНрдо рд╕рдкреЛрд░реНрдЯреЗрдб рдлрд╛рдЗрд╡ рдХреАрд╡рд░реНрдб





"рдЬрд╛рджреВ" (рдпрд╛рдиреА, рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ) рдЕрдкрд╡рд╛рдж # 1 рдпрд╣ рд╣реИ рдХрд┐ рдкрдХрдбрд╝, рдлреЗрдВрдХ, рдлреЗрдВрдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ java.lang.Throwable рдпрд╛ рдЗрд╕рдХреЗ рд╡рдВрд╢ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдлреЗрдВрдХрддрд╛ рд╣реИ:

рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ

public class App { public static void main(String[] args) throws Throwable {} }
      
      







рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ

 public class App { public static void main(String[] args) throws String {} } >> COMPILATION ERROR: Incompatible types: required 'java.lang.Throwable', found: 'java.lang.String'
      
      







рдкрдХрдбрд╝рдиреЗ:

рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ

 public class App { public static void main(String[] args) { try { } catch (Throwable t) {} } }
      
      







рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ

 public class App { public static void main(String[] args) { try { } catch (String s) {} } } >> COMPILATION ERROR: Incompatible types: required 'java.lang.Throwable', found: 'java.lang.String'
      
      







рдлреЗрдВрдХ:

рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ

 public class App { public static void main(String[] args) { // Error -  Throwable throw new Error(); } }
      
      







рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ

 public class App { public static void main(String[] args) { throw new String("Hello!"); } } >> COMPILATION ERROR: Incompatible types: required 'java.lang.Throwable', found: 'java.lang.String'
      
      







рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдереНрд░реЛ рдХреЛ рдПрдХ рдЧреИрд░-рдЕрд╢рдХреНрдд рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрдиреНрдпрдерд╛ рд░рди рд╕рдордп рдкрд░ рдПрдХ NullPointerException

 public class App { public static void main(String[] args) { throw null; } } >> RUNTIME ERROR: Exception in thread "main" java.lang.NullPointerException
      
      







рдлреЗрдВрдХрдирд╛ рдФрд░ рдирдпрд╛ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ, рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ "рдлреЗрдВрдХ" рджреЗрддреЗ рд╣реИрдВ

 public class App { public static void main(String[] args) { Error ref = new Error(); //   throw ref; // ""  } } >> RUNTIME ERROR: Exception in thread "main" java.lang.Error
      
      







рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

 public class App { public static void main(String[] args) { f(null); } public static void f(NullPointerException e) { try { throw e; } catch (NullPointerException npe) { f(npe); } } } >> RUNTIME ERROR: Exception in thread "main" java.lang.StackOverflowError
      
      









2. рдХреНрдпреЛрдВ System.err рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, System.out рдХрд╛ рдирд╣реАрдВ





System.out рдПрдХ рдмрдлрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╣реИ, рд▓реЗрдХрд┐рди System.err рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рд╖реНрдХрд░реНрд╖ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

 public class App { public static void main(String[] args) { System.out.println("sout"); throw new Error(); } } >> RUNTIME ERROR: Exception in thread "main" java.lang.Error >> sout
      
      







рддреЛ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ (рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╕рдордп рдУрд╡рд░рдЯреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛)

 public class App { public static void main(String[] args) { System.out.println("sout"); throw new Error(); } } >> sout >> RUNTIME ERROR: Exception in thread "main" java.lang.Error
      
      







рдЪрд▓реЛ рдЗрд╕реЗ рдбреНрд░рд╛ рдХрд░реЗрдВ

    +----------------+ +->| msg2 msg1 msg0 | --> out / +----------------+ \ / +-> +--------+   | | \ +-> +--------+ \ / +------------------------> err  ,  
      
      





рдЬрдм рдЖрдк System.err рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ рддреБрд░рдВрдд рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк System.out рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрдлрд╝рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдЯреИрдХреНрдЯреНрд░реЗрд╕ рдХреЛ рдПрдХ рдЕрдирд╣реИрдВрдбрд▓реНрдб рдЕрдкрд╡рд╛рдж System.err рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ "рдирд┐рдпрдорд┐рдд" рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред





3. рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛ рдореМрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)





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

 public class App { public double sqr(double arg) { //  double return arg * arg; // double * double -  double } }
      
      





 public class App { public double sqr(double arg) { //  double int k = 1; //  int return k; //    int  double } }
      
      





 //   ,   -    public class App { public double sqr(double arg) { //  double int k = 1; //  int return (double) k; //   int  double } }
      
      







рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рджреВрд╕рд░рд╛ рдкреНрд░рдХрд╛рд░)

 public class App { public static double sqr(double arg) { return "hello!"; } } >> COMPILATION ERROR: Incompatible types. Required: double. Found: java.lang.String
      
      







рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдХреЛрдИ рд╡рд╛рдкрд╕реА рдирд╣реАрдВ

 public class App { public static double sqr(double arg) { } } >> COMPILATION ERROR: Missing return statement
      
      







рдФрд░ рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рд╡рд╛рдкрд╕реА рд╣реЛрдЧреА)

 public class App { public static double sqr(double arg) { if (System.currentTimeMillis() % 2 == 0) { return arg * arg; //  currentTimeMillis() -  ,    } //   ,   ? } } >> COMPILATION ERROR: Missing return statement
      
      







рдХрдВрдкрд╛рдЗрд▓рд░ рдореЙрдирд┐рдЯрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

 public class App { public static void main(String[] args) { double d = sqr(10.0); // ,    d? System.out.println(d); } public static double sqr(double arg) { // nothing } } >> COMPILATION ERROR: Missing return statement
      
      







рдордЬрд╝реЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди "рд╡рд┐рдзрд┐ рд▓рдЯрдХрд╛рдПрдБ"

 public class App { public static double sqr(double arg) { while (true); // ,  ! } }
      
      







рдпрд╣рд╛рдБ d рдореЗрдВ, рдХреБрдЫ рднреА рдХрднреА рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ sqr рдкрджреНрдзрддрд┐ рд▓рдЯрдХреА рд╣реБрдИ рд╣реИ

 public class App { public static void main(String[] args) { double d = sqr(10.0); // sqr -  "",  System.out.println(d); // d -     ! } public static double sqr(double arg) { while (true); //      "" } }
      
      







рд╕рдВрдХрд▓рдХ "рдкреНрд▓рдЧ" рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ (рдлрд┐рд░ рднреА рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рд▓рдЯрдХрд╛ рд▓реЗрдВ)

 public class App { public static double sqr(double arg) { if (System.currentTimeMillis() % 2 == 0) { return arg * arg; //  ,   double } else { while (true); //   ""  } } }
      
      







рд▓реЗрдХрд┐рди рдЕрдкрд╡рд╛рдж рддрдВрддреНрд░ рдХреБрдЫ рднреА рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ!

 public class App { public static double sqr(double arg) { throw new RuntimeException(); } }
      
      







рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ

 public class App { public static double sqr(double arg) {//       double long time = System.currentTimeMillis(); if (time % 2 == 0) { return arg * arg; // ,   double } else if (time % 2 == 1) { { while (true); // ,   "" } else { throw new RuntimeException(); //    } } }
      
      







рд▓реЗрдХрд┐рди рдбрдмрд▓ рдХреНрдпрд╛ RuntimeException рдлреЗрдВрдХрдиреЗ рд╕рдорд╛рд░реЛрд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА?

рдФрд░ рдирд╣реАрдВ!

 public class App { public static void main(String[] args) { // sqr - "" (  "" ), double d = sqr(10.0); //   main()      // d -     ! System.out.println(d); //      ! } public static double sqr(double arg) { throw new RuntimeException(); // ""  } } >> RUNTIME ERROR: Exception in thread "main" java.lang.RuntimeException
      
      







рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдкрд╡рд╛рдж рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рд╡рд┐рдзрд┐ рдиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЛрдЧреБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛрдЧреБрдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреА рд╡рд┐рдзрд┐ рдиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рд╢реВрдиреНрдп), рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХреБрдЫ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред



рдЖрдЗрдП рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред



рдХрд╛рд░реНрдп: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдЖрдпрдд рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ

 public static int area(int width, int height) {...}
      
      





рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ - "рдЖрдпрдд рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ", рдФрд░ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ":

 public static int area(int width, int height) { return width * height; //    }
      
      







рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрд░реНрдХ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ?

рдпрджрд┐ рд╣рдо рдмрд╕ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреЛ рдЖрдЧреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рд╢рд╛рдпрдж рд╣рдордиреЗ "рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛" - рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рджреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрдд рдХрд╛ рдХреНрд╖реЗрддреНрд░ -10 рдФрд░ -20 = 200 рд╣реИред



рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛ рд╕рдХрддреЗ

 public static int area(int width, int height) { if (width < 0 || height < 0) { //    ,  } else { return width * height; } } >> COMPILATION ERROR: Missing return statement
      
      







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

 public static int area(int width, int height) { if (width < 0 || height < 0) { System.out.println("Bad ..."); } return width * height; }
      
      







рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рди рджрд░реНрд╢рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реИ (рддреНрд░реБрдЯрд┐ рдХреЛрдб), рд▓реЗрдХрд┐рди рдХреМрди рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдкрдврд╝реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ?

 public static int area(int width, int height) { if (width < 0 || height < 0) { return -1; //  ""   } return width * height; }
      
      







рдмреЗрд╢рдХ, рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ

 public static int area(int width, int height) { if (width < 0 || height < 0) { System.exit(0); } return width * height; }
      
      







рд▓реЗрдХрд┐рди "рд╕рд╣реА рддрд░реАрдХрд╛" рдпрд╣ рд╣реИ: рдпрджрд┐ рдЖрдк рд╕рдВрднрд╡ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ

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

 public static int area(int width, int height) { if (width < 0 || height < 0) { throw new IllegalArgumentException("Negative sizes: w = " + width + ", h = " + height); } return width * height; }
      
      









4. рдЧреИрд░-рдирд┐рдпрдВрддреНрд░рдг рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг



рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рддрдВрддреНрд░ (рдЕрдкрд╡рд╛рдж) рдкреНрд░рдмрдВрдзрди рдХреЗ рдЧреИрд░-рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рддрдВрддреНрд░ рд╣реИред

рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдХреЗ рднреАрддрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди), рдлреНрд░реЗрдо рдХреЗ рдПрдХ рд╕реНрдЯреИрдХ ("рд╕реНрдЯреИрдХ") рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдпрд╛ рддреЛ рдПрдХ рдлреНрд░реЗрдо рдХреЗ рднреАрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

 public class App { public static void main(String[] args) { // :   int x = 42; //   int y = x * x; //   x = x * y; //   ... } }
      
      





 public class App { public static void main(String[] args) { // :   if (args.length > 2) {   //     ... } else { //   ... } //   ... } }
      
      





 public class App { public static void main(String[] args) { // :   do..while int x = 1; do { ... } while (x++ < 10); ... } }
      
      





рдФрд░ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВред



рдпрд╛ рдирд┐рдпрд░рдмреЛрд░реНрдбрд┐рдВрдЧ рдлреНрд░реЗрдо рдХреЗ рдмреАрдЪ рдлреНрд░реЗрдо рдХреЗ "рд╕реНрдЯреИрдХ" рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╣реЛрддрд╛ рд╣реИ





рд╡рд╛рдкрд╕реА - рдПрдХ рдлреНрд░реЗрдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (рдлреНрд░реЗрдо # 4 (рдПрдЪ) рд╡рд┐рдзрд┐ рд╕реЗ))

 public class App { public static void main(String[] args) { System.err.println("#1.in"); f(); //  ,   ,     System.err.println("#1.out"); //  } //    ,   public static void f() { System.err.println(". #2.in"); g(); //  ,   ,     System.err.println(". #2.out"); // } //    ,   public static void g() { System.err.println(". . #3.in"); h(); //  ,   ,     System.err.println(". . #3.out"); //  } //    ,   public static void h() { System.err.println(". . . #4.in"); if (true) { System.err.println(". . . #4.RETURN"); return; //      'return' } System.err.println(". . . #4.out"); //  } } >> #1.in >> . #2.in >> . . #3.in >> . . . #4.in >> . . . #4.RETURN >> . . #3.out >> . #2.out >> #1.out
      
      







рдлреЗрдВрдХ - рд╕рднреА рдлреНрд░реЗрдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ

 public class App { public static void main(String[] args) { System.err.println("#1.in"); f(); //  ,   ,     System.err.println("#1.out"); // ! } public static void f() { System.err.println(". #2.in"); g(); //  ,   ,     System.err.println(". #2.out"); // ! } public static void g() { System.err.println(". . #3.in"); h(); //  ,   ,     System.err.println(". . #3.out"); // ! } public static void h() { System.err.println(". . . #4.in"); if (true) { System.err.println(". . . #4.THROW"); throw new Error(); //      (" ")  'throw' } System.err.println(". . . #4.out"); // ! } } >> #1.in >> . #2.in >> . . #3.in >> . . . #4.in >> . . . #4.THROW >> RUNTIME ERROR: Exception in thread "main" java.lang.Error
      
      







рдкрдХрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдЙрдбрд╝рд╛рди рдЕрдкрд╡рд╛рдж рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд╛рд░рдг рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлреНрд░реЗрдо рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ)ред

рд╣рдо 3 рдлрд╝реНрд░реЗрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реБрдХрддреЗ рд╣реИрдВ, рдлреНрд░реЗрдо # 4 (рд╡рд┐рдзрд┐ h ()) + рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдбрд╝рддреЗ рд╣реИрдВ # 3 (рд╡рд┐рдзрд┐ g ()) + рдлреНрд░реЗрдо # 2 (рд╡рд┐рдзрд┐ f ())

 public class App { public static void main(String[] args) { System.err.println("#1.in"); try { f(); //  ,   ,     } catch (Error e) { // "" ""  System.err.println("#1.CATCH"); //   } System.err.println("#1.out"); //   } public static void f() { System.err.println(". #2.in"); g(); //  ,   ,     System.err.println(". #2.out"); // ! } public static void g() { System.err.println(". . #3.in"); h(); //  ,   ,     System.err.println(". . #3.out"); // ! } public static void h() { System.err.println(". . . #4.in"); if (true) { System.err.println(". . . #4.THROW"); throw new Error(); //      (" ")  'throw' } System.err.println(". . . #4.out"); // ! } } >> #1.in >> . #2.in >> . . #3.in >> . . . #4.in >> . . . #4.THROW >> #1.CATCH >> #1.out
      
      





рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╛рдирдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрдЦреНрдп () рд╡рд┐рдзрд┐ (рдлреНрд░реЗрдо # 1) рдореЗрдВ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛



рд╣рдо 2 рдлрд╝реНрд░реЗрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реБрдХрддреЗ рд╣реИрдВ, рдлрд╝реНрд░реЗрдо # 4 (h () рд╡рд┐рдзрд┐) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдбрд╝рддреЗ рд╣реИрдВ + рдлреНрд░реЗрдо 3 (g () рд╡рд┐рдзрд┐) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдбрд╝рддреЗ рд╣реИрдВ

 public class App { public static void main(String[] args) { System.err.println("#1.in"); f(); //  ,   ,     System.err.println("#1.out"); //    } public static void f() { System.err.println(". #2.in"); try { g(); //  ,   ,     } catch (Error e) { // "" ""  System.err.println(". #2.CATCH"); //   } System.err.println(". #2.out"); //   } public static void g() { System.err.println(". . #3.in"); h(); //  ,   ,     System.err.println(". . #3.out"); // ! } public static void h() { System.err.println(". . . #4.in"); if (true) { System.err.println(". . . #4.THROW"); throw new Error(); //      (" ")  'throw' } System.err.println(". . . #4.out"); // ! } } >> #1.in >> . #2.in >> . . #3.in >> . . . #4.in >> . . . #4.THROW >> . #2.CATCH >> . #2.out >> #1.out
      
      







рд╣рдо 1 рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдж рд░реБрдХрддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░рд┐рдЯрд░реНрди рдХрд╛ рдПрдирд╛рд▓реЙрдЧ, рдмрд╕ рдлреНрд░реЗрдо рдХреЛ "рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ" рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)

 public class App { public static void main(String[] args) { System.err.println("#1.in"); f(); //  ,   ,     System.err.println("#1.out"); //    } public static void f() { System.err.println(". #2.in"); g(); //  ,   ,     System.err.println(". #2.out"); //    } public static void g() { System.err.println(". . #3.in"); try { h(); //  ,   ,     } catch (Error e) { // "" ""  System.err.println(". . #3.CATCH"); //   } System.err.println(". . #3.out"); //   } public static void h() { System.err.println(". . . #4.in"); if (true) { System.err.println(". . . #4.THROW"); throw new Error(); //      (" ")  'throw' } System.err.println(". . . #4.out"); // ! } } >> #1.in >> . #2.in >> . . #3.in >> . . . #4.in >> . . . #4.THROW >> . . #3.CATCH >> . . #3.out >> . #2.out >> #1.out
      
      







рддреЛ, рдЪрд▓реЛ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрдо рдХрд░реЗрдВ

 // --- RETURN--- // --- THROW--- //   1-  //    ( 4)  #1.in #1.in . #2.in . #2.in . . #3.in . . #3.in . . . #4.in . . . #4.in . . . #4.RETURN . . . #4.THROW . . #3.out RUNTIME EXCEPTION: Exception in thread "main" java.lang.Error . #2.out #1.out // --- THROW+CATCH--- //   3-  //   2-  //   1-  #1.in #1.in #1.in . #2.in . #2.in . #2.in . . #3.in . . #3.in . . #3.in . . . #4.in . . . #4.in . . . #4.in . . . #4.THROW . . . #4.THROW . . . #4.THROW #1.CATCH . #2.CATCH . . #3.CATCH #1.out . #2.out . . #3.out #1.out . #2.out #1.out
      
      









5. рдХреЛрд╢рд┐рд╢ + рдкрдХрдбрд╝ (рдкрдХрдбрд╝ - рдмрд╣реБрд░реВрдкреА)





рдЕрдкрд╡рд╛рдж рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ

  Object | Throwable / \ Error Exception | RuntimeException
      
      







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

1. рд╡реЗ рдЬрдбрд╝ java.lang.Throwable (java.lang.Object java.lang.Throwable рдХреЗ рдкреВрд░реНрд╡рдЬ рд╣реИ, рдХреЗ рд╕рд╛рде рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдм рдПрдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ)

2. рдЙрдирдХреЗ рдкрд╛рд╕ рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)



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

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new RuntimeException();} System.err.print(" 1"); } catch (Exception e) { // catch  Exception  RuntimeException System.err.print(" 2"); } System.err.println(" 3"); } } >> 0 2 3
      
      







рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐: рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛, рдЬреЛ рдЯрд╛рдЗрдк RuntimeException рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╣реЛрддрд╛ рд╣реИ

 public class App { public static void main(String[] args) { try { throw new RuntimeException(); } catch (Exception e) { if (e instanceof RuntimeException) { RuntimeException re = (RuntimeException) e; System.err.print(" RuntimeException   !!!"); } else { System.err.print("    RuntimeException???"); } } } } >>  RuntimeException   !!!
      
      







рдмрдЪреНрдЪреЗ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝рдирд╛ рдкреВрд░реНрд╡рдЬ рдХреЛ рдкрдХрдбрд╝ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ

 public class App { public static void main(String[] args) throws Exception { //   'throws' try { System.err.print(" 0"); if (true) {throw new Exception();} System.err.print(" 1"); } catch (RuntimeException e) { System.err.print(" 2"); } System.err.print(" 3"); } } >> 0 >> RUNTIME EXCEPTION: Exception in thread "main" java.lang.Exception
      
      







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

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new Error();} System.err.print(" 1"); } catch (Exception e) { System.err.print(" 2"); } System.err.print(" 3"); } } >> 0 >> RUNTIME EXCEPTION: Exception in thread "main" java.lang.Error
      
      







рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЕрдкрд╡рд╛рдж рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ JVM рдЙрди рдХрдердиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдкреНрд░рдпрд╛рд╕ + рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдХреЛрд╖реНрдардХ рдХреЗ рдмрд╛рдж рдЖрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдирд╣реАрдВ рд╣реБрдЖ рддреЛ рд╣рдо

1. рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдореЗрдВ рдордд рдЬрд╛рдУ

2. рдЙрдбрд╝рд╛рди рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЗ рдлреНрд░реЗрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ



рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдкрдХрдбрд╝ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддреЗ рд╣реИрдВ?

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new RuntimeException();} System.err.print(" 1"); } catch (RuntimeException e) { //  RuntimeException System.err.print(" 2"); if (true) {throw new Error();} //   Error } System.err.println(" 3"); //  -   Error } } >> 0 2 >> RUNTIME EXCEPTION: Exception in thread "main" java.lang.Error
      
      





рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рднреА рдмрд╛рдзрд┐рдд рд╣реИ ("3" рдкреНрд░рд┐рдВрдЯ рди рдХрд░реЗрдВ)ред рдирдП рдЕрдкрд╡рд╛рдж рдХрд╛ рдЯреНрд░рд╛рдп-рдХреИрдЪ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ



рд╣рдо рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╣рд╛рде рдкрд░" рд╣реИ

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new RuntimeException();} System.err.print(" 1"); } catch (RuntimeException e) { //  RuntimeException System.err.print(" 2"); if (true) {throw e;} //       } System.err.println(" 3"); //  -   RuntimeException } } >> 0 2 >> RUNTIME EXCEPTION: Exception in thread "main" java.lang.RuntimeException
      
      







рдФрд░ рд╣рдо рдЕрдиреНрдп рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдВрдЧреЗ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new RuntimeException();} System.err.print(" 1"); } catch (RuntimeException e) { //  RuntimeException System.err.print(" 2"); if (true) {throw new Error();} //    Error } catch (Error e) { //   cath  Error "",       System.err.print(" 3"); } System.err.println(" 4"); } } >> 0 2 >> RUNTIME EXCEPTION: Exception in thread "main" java.lang.Error
      
      





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



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдиреАрдЪреЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ - рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ "рдареАрдХ рдХрд░рддрд╛ рд╣реИ"

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new RuntimeException();} System.err.print(" 1"); } catch (RuntimeException e) { //  RuntimeException System.err.print(" 2.1"); try { System.err.print(" 2.2"); if (true) {throw new Error();} //    Error System.err.print(" 2.3"); } catch (Throwable t) { //  Error System.err.print(" 2.4"); } System.err.print(" 2.5"); } catch (Error e) { //   cath  Error "",       System.err.print(" 3"); } System.err.println(" 4"); } } >> 0 2.1 2.2 2.4 2.5 4
      
      









6. try + catch + catch + ...



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



рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд┐рдпрдо рд╣реИ - рдЖрдк рдкреВрд░реНрд╡рдЬ рдХреЗ рдмрд╛рдж рдПрдХ рд╡рдВрд╢рдЬ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ! (рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд╛рдж RuntimeException)

 public class App { public static void main(String[] args) { try { } catch (Exception e) { } catch (RuntimeException e) { } } } >> COMPILATION ERROR: Exception 'java.lang.RuntimeException' has alredy been caught
      
      







рднрд╛рдИ рдХреЛ рднрд╛рдИ рдХреЗ рдмрд╛рдж рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ (рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж RuntimeException)

 public class App { public static void main(String[] args) { try { } catch (Error e) { } catch (RuntimeException e) { } } }
      
      







"рд╕рд╣реА" рдХреИрдЪ рдЪреБрдирдиреЗ рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рд╣рд╛рдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЬреЗрд╡реАрдПрдо рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдРрд╕рд╛ рдкрдХрдбрд╝ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЕрдкрд╡рд╛рдж рдЙрд╕рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЙрд╕рдХреЗ рдкреВрд░реНрд╡рдЬ рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВред рдиреАрдЪреЗ - рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

 public class App { public static void main(String[] args) { try { throw new Exception(); } catch (RuntimeException e) { System.err.println("catch RuntimeException"); } catch (Exception e) { System.err.println("catch Exception"); } catch (Throwable e) { System.err.println("catch Throwable"); } System.err.println("next statement"); } } >> catch Exception >> next statement
      
      







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

 public class App { public static void main(String[] args) { try { Throwable t = new Exception(); //   Throwable     Exception throw t; } catch (RuntimeException e) { System.err.println("catch RuntimeException"); } catch (Exception e) { System.err.println("catch Exception"); } catch (Throwable e) { System.err.println("catch Throwable"); } System.err.println("next statement"); } } >> catch Exception >> next statement
      
      









7.рдЯреНрд░реА + рдЖрдЦрд┐рд░



рдЕрдЧрд░ рдмреНрд▓реЙрдХ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЕрдВрдд рдореЗрдВ рд╕реЗрдХреНрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ

 public class App { public static void main(String[] args) { try { System.err.println("try"); } finally { System.err.println("finally"); } } } >> try >> finally
      
      







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

 public class App { public static void main(String[] args) { try { throw new RuntimeException(); } finally { System.err.println("finally"); } } } >> finally >> Exception in thread "main" java.lang.RuntimeException
      
      







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

 public class App { public static void main(String[] args) { try { return; } finally { System.err.println("finally"); } } } >> finally
      
      







рдЕрдВрдд рдореЗрдВ рдЦрдВрдб рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо JVM рдХреЛ "рдирд╕реНрдЯреЗрдб" рдХрд░рддреЗ рд╣реИрдВ

 public class App { public static void main(String[] args) { try { System.exit(42); } finally { System.err.println("finally"); } } } >> Process finished with exit code 42
      
      







System.exit (42) рдФрд░ Runtime.getRuntime ()ред Exit (42) рд╕рдорд╛рдирд╛рд░реНрдердХ рд╢рдмреНрдж рд╣реИрдВ

 public class App { public static void main(String[] args) { try { Runtime.getRuntime().exit(42); } finally { System.err.println("finally"); } } } >> Process finished with exit code 42
      
      







рдФрд░ Runtime.getRuntime () рдХреЗ рд╕рд╛рдеред рд╣реЙрд▓реНрдЯ (42) - рднреА рдЕрдВрдд рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ

 public class App { public static void main(String[] args) { try { Runtime.getRuntime().halt(42); } finally { System.err.println("finally"); } } } >> Process finished with exit code 42
      
      







рдирд┐рдХрд╛рд╕ () рдмрдирд╛рдо рдкрдбрд╝рд╛рд╡ ()

javadoc: java.lang.Runtime # halt (int рд╕реНрдерд┐рддрд┐)

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



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

 public class App { public static void main(String[] args) { try { System.err.println("try"); if (true) {throw new RuntimeException();} } finally { System.err.println("finally"); } System.err.println("more"); } } >> try >> finally >> Exception in thread "main" java.lang.RuntimeException
      
      







"рдЕрдЧрд░ (рд╕рддреНрдп) {...}" рдХреЗ рд╕рд╛рде рдЪрд╛рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╕рдВрдХрд▓рдХ рдЕрдЧрдореНрдп рдХреЛрдб (рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ

 public class App { public static void main(String[] args) { try { System.err.println("try"); throw new RuntimeException(); } finally { System.err.println("finally"); } System.err.println("more"); } } >> COMPILER ERROR: Unrechable statement
      
      







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

 public class App { public static void main(String[] args) { try { System.err.println("try"); if (true) {return;} } finally { System.err.println("finally"); } System.err.println("more"); } } >> try >> finally
      
      







рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрдиреНрдп рдереНрд░реЛ / рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рдлреЗрдВрдХ / рд╡рд╛рдкрд╕реА рдХреЛ "рдорд╛рд░" рд╕рдХрддреЗ рд╣реИрдВ

 public class App { public static void main(String[] args) { System.err.println(f()); } public static int f() { try { return 0; } finally { return 1; } } } >> 1
      
      







 public class App { public static void main(String[] args) { System.err.println(f()); } public static int f() { try { throw new RuntimeException(); } finally { return 1; } } } >> 1
      
      







 public class App { public static void main(String[] args) { System.err.println(f()); } public static int f() { try { return 0; } finally { throw new RuntimeException(); } } } >> Exception in thread "main" java.lang.RuntimeException
      
      







 public class App { public static void main(String[] args) { System.err.println(f()); } public static int f() { try { throw new Error(); } finally { throw new RuntimeException(); } } } >> Exception in thread "main" java.lang.RuntimeException
      
      







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

 // open some resource try { // use resource } finally { // close resource }
      
      







рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд▓реЙрдХ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

 Lock lock = new ReentrantLock(); ... lock.lock(); try { // some code } finally { lock.unlock(); }
      
      







рдпрд╛ рдПрдХ рдЦреБрд▓реА рдлрд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

 InputStream input = new FileInputStream("..."); try { // some code } finally { input.close(); }
      
      







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



рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рдЕрдВрдд рдореЗрдВ рдЦрдВрдб рдореЗрдВ рдпрд╣ рдорд╛рдирдХ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдерд╛ред

рдмреЗрд╢рдХ, рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА "рдмрд╛рдЗрдХ" рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 public class App { public static void main(String[] args) { System.err.println(f()); } public static int f() { long rnd = System.currenttimeMillis(); boolean finished = false; try { if (rnd % 3 == 0) { throw new Error(); } else if (rnd % 3 == 1) { throw new RuntimeException(); } else { // nothing } finished = true; } finally { if (finished) { //    } else { //  ,  ? } } } }
      
      







рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ

- рдЕрдВрдд рдореЗрдВ рдЦрдВрдб рд╕реЗ рд╡рд╛рдкрд╕реА (рд╣рдо рдкреНрд░рдпрд╛рд╕ рдмреНрд▓реЙрдХ рд╕реЗ рдЕрдкрд╡рд╛рдж рдорд┐рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ)

- рдЕрдВрдд рдореЗрдВ рдЦрдВрдб рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреА рд╣реИрдВ (рд╣рдо рдкреНрд░рдпрд╛рд╕ рдмреНрд▓реЙрдХ рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдорд┐рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ)





8.рдЯреНрд░реА + рдХреИрдЪ + рдЖрдЦрд┐рд░





рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); // nothing System.err.print(" 1"); } catch(Error e) { System.err.print(" 2"); } finally { System.err.print(" 3"); } System.err.print(" 4"); } } >> 0 1 3 4
      
      





рд╣рдо рдкрдХрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдВрдд рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдмрдпрд╛рди рдХреЗ рдмрд╛рдж рдЬрд╛рд░реА рд░рдЦреЗрдВ



рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкрдХрдбрд╝ рд╣реИ

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new Error();} System.err.print(" 1"); } catch(Error e) { System.err.print(" 2"); } finally { System.err.print(" 3"); } System.err.print(" 4"); } } >> 0 2 3 4
      
      





рд╣рдо рдкрдХрдбрд╝ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЕрдВрдд рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдмрдпрд╛рди рдХреЗ рдмрд╛рдж рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ,



рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдкрдХрдбрд╝ рдирд╣реАрдВ рд╣реИ

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); if (true) {throw new RuntimeException();} System.err.print(" 1"); } catch(Error e) { System.err.print(" 2"); } finally { System.err.print(" 3"); } System.err.print(" 4"); } } >> 0 3 >> RUNTIME ERROR: Exception in thread "main" java.lang.RuntimeException
      
      





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





9. рдиреЗрд╕реНрдЯреЗрдб рдХреЛрд╢рд┐рд╢ + рдкрдХрдбрд╝ + рдЕрдВрдд рдореЗрдВ



рдСрдкрд░реЗрдЯрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрд╕реАрдорд┐рдд рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЕрдЧрд░

 public class App { public static void main(String[] args) { if (args.length > 1) { if (args.length > 2) { if (args.length > 3) { ... } } } } }
      
      







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

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







рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢-рдХреИрдХреНрдЯрд╣-рдЕрдВрдд рдореЗрдВ рднреА рдЕрд╕реАрдорд┐рдд рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

 public class App { public static void main(String[] args) { try { try { try { ... } catch (Exception e) { } finally {} } catch (Exception e) { } finally {} } catch (Exception e) { } finally {} } }
      
      







рдпрд╛ рдРрд╕реЗ рднреА

 public class App { public static void main(String[] args) { try { try { ... } catch (Exception e) { ... } finally { ... } } catch (Exception e) { try { ... } catch (Exception e) { ... } finally { ... } } finally { try { ... } catch (Exception e) { ... } finally { ... } } } }
      
      







рдЦреИрд░, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗ рдиреЗрд╕реНрдЯреЗрдб-рдХреИрдЪ-рдЕрдВрддрддрдГ

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); try { System.err.print(" 1"); //  System.err.print(" 2"); } catch (RuntimeException e) { System.err.print(" 3"); //   -   } finally { System.err.print(" 4"); //   } System.err.print(" 5"); //  -    } catch (Exception e) { System.err.print(" 6"); //   -   } finally { System.err.print(" 7"); //   } System.err.print(" 8"); //  -    } } >> 0 1 2 4 5 7 8
      
      





рд╣рдо рджреЛрдиреЛрдВ рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ (рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ), рдЕрдВрдд рдореЗрдВ рджреЛрдиреЛрдВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдлреНрдЯрд░ рджреЛрдиреЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрддреЗ рд╣реИрдВред



рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░рд╛рдИ-рдХреИрдЪ-рдЖрдЦрд┐рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рдЗрдВрдЯрд░рдирд▓ рдХреИрдЪ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдЧрд╛

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); try { System.err.print(" 1"); if (true) {throw new RuntimeException();} System.err.print(" 2"); } catch (RuntimeException e) { System.err.print(" 3"); //  -   } finally { System.err.print(" 4"); //   } System.err.print(" 5"); //  -     } catch (Exception e) { System.err.print(" 6"); //   -  ,   } finally { System.err.print(" 7"); //   } System.err.print(" 8"); //  -     } } >> 0 1 3 4 5 7 8
      
      





рд╣рдо FIRST рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ (рдкреНрд░рд┐рдВрдЯ "3"), рд▓реЗрдХрд┐рди рд╕реЗрдХрдВрдб рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рди рдЬрд╛рдПрдВ (рдкреНрд░рд┐рдВрдЯ рди рдХрд░реЗрдВ "6", рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрд╣рд▓реЗ рдкрдХрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЕрдВрдд рдореЗрдВ рджреЛрдиреЛрдВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ (рдкреНрд░рд┐рдВрдЯ 4) рдФрд░ "7"), рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо "5" рдФрд░ "8" рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрд╣рд▓реЗ рдкрдХрдбрд╝рдХрд░ рд░реЛрдХрд╛ рдЧрдпрд╛ рдерд╛)ред



рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░рд╛рдИ-рдХреИрдЪ-рдЖрдЦрд┐рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдХ рдмрд╛рд╣рд░реА рдХреИрдЪ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдЧрд╛

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); try { System.err.print(" 1"); if (true) {throw new Exception();} System.err.print(" 2"); } catch (RuntimeException e) { System.err.print(" 3"); //   -  ,    } finally { System.err.print(" 4"); //   } System.err.print(" 5"); //   -     } catch (Exception e) { System.err.print(" 6"); //  -    } finally { System.err.print(" 7"); //   } System.err.print(" 8"); //  -     } } >> 0 1 4 6 7 8
      
      





рд╣рдо FIRST рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ (тАЬ3тАЭ рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди SECOND рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ (тАЬ6тАЭ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ), рдЖрдЦрд┐рд░ рдореЗрдВ рджреЛрдиреЛрдВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ (тАЬ4тАЭ рдФрд░ тАЬ7тАЭ), FIRST рдХреЗрд╕ рдореЗрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рдХрд░реЗрдВ ("5" рдкреНрд░рд┐рдВрдЯ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ), рд╕реЗрдХрдВрдб рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрдд рдХреЗ рдмрд╛рдж рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ ("8" рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ)ред



рдиреЗрд╕реНрдЯреЗрдб-рдХреИрдЪ-рдЖрдЦрд┐рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛

 public class App { public static void main(String[] args) { try { System.err.print(" 0"); try { System.err.print(" 1"); if (true) {throw new Error();} System.err.print(" 2"); } catch (RuntimeException e) { System.err.print(" 3"); //   -  ,    } finally { System.err.print(" 4"); //   } System.err.print(" 5"); //   -     } catch (Exception e) { System.err.print(" 6"); //   -  ,    } finally { System.err.print(" 7"); //   } System.err.print(" 8"); //   -     } } >> 0 1 4 7 >> RUNTIME EXCEPTION: Exception in thread "main" java.lang.Error
      
      





рд╣рдо рдУрдмреАрдИ рдХреИрдЪ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ ("3" рдФрд░ "6" рдкреНрд░рд┐рдВрдЯ рди рдХрд░реЗрдВ), рдЕрдВрдд рдореЗрдВ рджреЛрдиреЛрдВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдБ ("4" рдФрд░ "7"), рдФрд░ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдб рдХреЛ рдЕрдВрдд рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рдХрд░реЗрдВ (рдкреНрд░рд┐рдВрдЯ рди рдХрд░реЗрдВ) "5" "рдФрд░" 8 ", рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ), рд╡рд┐рдзрд┐ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдкрд╡рд╛рдж рджреНрд╡рд╛рд░рд╛ рдмрд╛рдзрд┐рдд рд╣реИред



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



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



рдореЗрд░реА рд╢рд┐рдХреНрд╖рдг рдкрджреНрдзрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ

  1. рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ
  2. рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рддреЗрдЬреА рд╕реЗ рдЬрдЯрд┐рд▓ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ
  3. рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рддрд░реНрдХ (рдЬрд╣рд╛рдБ рддрдХ рд╕рдВрднрд╡ рд╣реЛ) рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВ
  4. рдореИрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг (50-100) рдХреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрддрд╛ рд╣реВрдВ
  5. рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реВрдВ


рдпрд╣ рд▓реЗрдЦ рдкреИрд░рд╛рдЧреНрд░рд╛рдл # 1 (рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк) рдФрд░ # 2 (рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рдХреНрд░рдо) рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред



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

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



All Articles