Java skúste blok
Java skúste blok sa používa na uzavretie kódu, ktorý môže vyvolať výnimku. Musí sa použiť v rámci metódy.
Ak sa v konkrétnom príkaze v bloku try vyskytne výnimka, zvyšok kódu bloku sa nevykoná. Preto sa odporúča neudržiavať kód v bloku try, ktorý nevyvolá výnimku.
Za blokom Java try musí nasledovať buď catch, alebo nakoniec blok.
Syntax Java try-catch
try{ //code that may throw an exception }catch(Exception_class_Name ref){}
Syntax bloku try-finally
try{ //code that may throw an exception }finally{}
Java catch blok
Java catch blok sa používa na spracovanie výnimky deklarovaním typu výnimky v rámci parametra. Deklarovaná výnimka musí byť výnimka nadradenej triedy (t. j. výnimka) alebo vygenerovaný typ výnimky. Dobrým prístupom je však deklarovať vygenerovaný typ výnimky.
algoritmus pre bfs
Blok catch musí byť použitý až po bloku try. Môžete použiť blok viacerých úlovkov s jedným pokusným blokom.
Interné fungovanie bloku try-catch v jazyku Java
JVM najprv skontroluje, či je výnimka spracovaná alebo nie. Ak sa výnimka nespracuje, JVM poskytuje predvolenú obsluhu výnimky, ktorá vykonáva nasledujúce úlohy:
- Vytlačí popis výnimky.
- Vytlačí stopu zásobníka (Hierarchiu metód, kde sa vyskytla výnimka).
- Spôsobí ukončenie programu.
Ale ak aplikačný programátor spracuje výnimku, normálny tok aplikácie sa zachová, t.j. zvyšok kódu sa vykoná.
Riešenie problému bez výnimky
Pokúsme sa pochopiť problém, ak nepoužijeme blok try-catch.
Príklad 1
TryCatchExample1.java
public class TryCatchExample1 { public static void main(String[] args) { int data=50/0; //may throw exception System.out.println('rest of the code'); } }Vyskúšajte to
Výkon:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Ako je zobrazené vo vyššie uvedenom príklade, zvyšok kódu sa nevykoná (v takom prípade, zvyšok kódu výpis nie je vytlačený).
Po výnimke môže byť 100 riadkov kódu. Ak sa výnimka nespracuje, celý kód pod výnimkou sa nespustí.
Riešenie pomocou spracovania výnimiek
Pozrime sa na riešenie vyššie uvedeného problému blokom java try-catch.
Príklad 2
TryCatchExample2.java
public class TryCatchExample2 { public static void main(String[] args) { try { int data=50/0; //may throw exception } //handling the exception catch(ArithmeticException e) { System.out.println(e); } System.out.println('rest of the code'); } }Vyskúšajte to
Výkon:
java.lang.ArithmeticException: / by zero rest of the code
Ako je zobrazené vo vyššie uvedenom príklade, zvyšok kódu sa vykonáva, t.j zvyšok kódu výpis sa vytlačí.
Príklad 3
V tomto príklade sme kód ponechali aj v bloku try, ktorý nevyvolá výnimku.
ako previesť char na reťazec java
TryCatchExample3.java
public class TryCatchExample3 { public static void main(String[] args) { try { int data=50/0; //may throw exception // if exception occurs, the remaining statement will not exceute System.out.println('rest of the code'); } // handling the exception catch(ArithmeticException e) { System.out.println(e); } } }Vyskúšajte to
Výkon:
java.lang.ArithmeticException: / by zero
Tu vidíme, že ak sa v bloku try vyskytne výnimka, zvyšok kódu bloku sa nevykoná.
Príklad 4
Tu spracovávame výnimku pomocou výnimky nadradenej triedy.
TryCatchExample4.java
public class TryCatchExample4 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception by using Exception class catch(Exception e) { System.out.println(e); } System.out.println('rest of the code'); } }Vyskúšajte to
Výkon:
java.lang.ArithmeticException: / by zero rest of the code
Príklad 5
Pozrime sa na príklad vytlačenia vlastnej správy pri výnimke.
TryCatchExample5.java
public class TryCatchExample5 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception catch(Exception e) { // displaying the custom message System.out.println('Can't divided by zero'); } } }Vyskúšajte to
Výkon:
Can't divided by zero
Príklad 6
Pozrime sa na príklad na vyriešenie výnimky v bloku catch.
TryCatchExample6.java
public class TryCatchExample6 { public static void main(String[] args) { int i=50; int j=0; int data; try { data=i/j; //may throw exception } // handling the exception catch(Exception e) { // resolving the exception in catch block System.out.println(i/(j+2)); } } }Vyskúšajte to
Výkon:
25
Príklad 7
V tomto príklade spolu s blokom try vložíme aj kód výnimky do bloku catch.
TryCatchExample7.java
public class TryCatchExample7 { public static void main(String[] args) { try { int data1=50/0; //may throw exception } // handling the exception catch(Exception e) { // generating the exception in catch block int data2=50/0; //may throw exception } System.out.println('rest of the code'); } }Vyskúšajte to
Výkon:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Tu vidíme, že blok catch neobsahoval kód výnimky. Takže uzavrite kód výnimky do bloku try a blok catch použite iba na spracovanie výnimiek.
Príklad 8
V tomto príklade spracovávame vygenerovanú výnimku (Arithmetic Exception) s iným typom triedy výnimky (ArrayIndexOutOfBoundsException).
TryCatchExample8.java
public class TryCatchExample8 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // try to handle the ArithmeticException using ArrayIndexOutOfBoundsException catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } }Vyskúšajte to
Výkon:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Príklad 9
Pozrime sa na príklad na spracovanie ďalšej nekontrolovanej výnimky.
TryCatchExample9.java
public class TryCatchExample9 { public static void main(String[] args) { try { int arr[]= {1,3,5,7}; System.out.println(arr[10]); //may throw exception } // handling the array exception catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } }Vyskúšajte to
Výkon:
java.lang.ArrayIndexOutOfBoundsException: 10 rest of the code
Príklad 10
Pozrime sa na príklad spracovania kontrolovanej výnimky.
príklady java kódu
TryCatchExample10.java
import java.io.FileNotFoundException; import java.io.PrintWriter; public class TryCatchExample10 { public static void main(String[] args) { PrintWriter pw; try { pw = new PrintWriter('jtp.txt'); //may throw exception pw.println('saved'); } // providing the checked exception handler catch (FileNotFoundException e) { System.out.println(e); } System.out.println('File saved successfully'); } }Vyskúšajte to
Výkon:
File saved successfully