рдореИрдВ рдСрдирд▓рд╛рдЗрди рд╢рд┐рдХреНрд╖рд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо 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 рдЪреИрдирд▓ рдкрд░ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреА рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪреИрдирд▓ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рдмреЗрд╣рддрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред
рдореЗрд░реА рд╢рд┐рдХреНрд╖рдг рдкрджреНрдзрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ
- рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ
- рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рддреЗрдЬреА рд╕реЗ рдЬрдЯрд┐рд▓ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ
- рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рддрд░реНрдХ (рдЬрд╣рд╛рдБ рддрдХ рд╕рдВрднрд╡ рд╣реЛ) рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВ
- рдореИрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг (50-100) рдХреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрддрд╛ рд╣реВрдВ
- рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реВрдВ
рдпрд╣ рд▓реЗрдЦ рдкреИрд░рд╛рдЧреНрд░рд╛рдл # 1 (рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк) рдФрд░ # 2 (рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рдХреНрд░рдо) рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХрд╛рдЗрдк: рдЧреЛрд▓реЛрд╡рдЪрдХреНрд░реНрд╕
рдИрдореЗрд▓: GolovachCourses@gmail.com