Java zkuste blok
Jáva Snaž se blok se používá k uzavření kódu, který by mohl vyvolat výjimku. Musí být použit v rámci metody.
Pokud se u konkrétního příkazu v bloku try vyskytne výjimka, zbytek kódu bloku se neprovede. Proto se doporučuje neuchovávat kód v bloku try, který nevyvolá výjimku.
Java try block musí být následován buď catch, nebo nakonec block.
Syntaxe Java try-catch
try{ //code that may throw an exception }catch(Exception_class_Name ref){}
Syntaxe bloku try-finally
try{ //code that may throw an exception }finally{}
Java catch blok
Java catch blok se používá ke zpracování výjimky deklarováním typu výjimky v rámci parametru. Deklarovaná výjimka musí být výjimka nadřazené třídy (tj. výjimka) nebo vygenerovaný typ výjimky. Dobrým přístupem je však deklarovat vygenerovaný typ výjimky.
"jaký je rozdíl mezi lvem a tygrem"
Blok catch musí být použit pouze po bloku try. Můžete použít více bloků catch s jedním blokem try.
Interní fungování bloku try-catch v Javě
JVM nejprve zkontroluje, zda je výjimka zpracována nebo ne. Pokud výjimka není zpracována, JVM poskytuje výchozí obslužnou rutinu výjimek, která provádí následující úlohy:
- Vytiskne popis výjimky.
- Vytiskne trasování zásobníku (Hierarchie metod, kde došlo k výjimce).
- Způsobí ukončení programu.
Ale pokud aplikační programátor zpracuje výjimku, normální tok aplikace je zachován, tj. zbytek kódu je spuštěn.
Řešení problému bez výjimky
Pokusme se problém pochopit, pokud nepoužijeme blok try-catch.
Pří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'); } }Otestujte to hned
Výstup:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Jak je zobrazeno ve výše uvedeném příkladu, zbytek kódu se neprovede (v takovém případě zbytek kódu výpis není vytištěn).
Po výjimce může být 100 řádků kódu. Pokud výjimka není zpracována, veškerý kód pod výjimkou nebude proveden.
Řešení pomocí zpracování výjimek
Podívejme se na řešení výše uvedeného problému pomocí java try-catch bloku.
Pří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'); } }Otestujte to hned
Výstup:
java.lang.ArithmeticException: / by zero rest of the code
Jak je zobrazeno ve výše uvedeném příkladu, zbytek kódu se provádí, tj zbytek kódu výpis je vytištěn.
Příklad 3
V tomto příkladu jsme také ponechali kód v bloku try, který nevyvolá výjimku.
převést strin na int
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); } } }Otestujte to hned
Výstup:
java.lang.ArithmeticException: / by zero
Zde vidíme, že pokud dojde k výjimce v bloku try, zbytek kódu bloku se neprovede.
Příklad 4
Zde zpracováváme výjimku pomocí výjimky nadřazené třídy.
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'); } }Otestujte to hned
Výstup:
java.lang.ArithmeticException: / by zero rest of the code
Příklad 5
Podívejme se na příklad tisku vlastní zprávy na výjimku.
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'); } } }Otestujte to hned
Výstup:
Can't divided by zero
Příklad 6
Podívejme se na příklad řešení výjimky 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)); } } }Otestujte to hned
Výstup:
25
Příklad 7
V tomto příkladu spolu s blokem try také uzavřeme kód výjimky 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'); } }Otestujte to hned
Výstup:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Zde vidíme, že blok catch neobsahoval kód výjimky. Uzavřete tedy kód výjimky do bloku try a použijte blok catch pouze ke zpracování výjimek.
ruční testování
Příklad 8
V tomto příkladu zpracováváme vygenerovanou výjimku (Arithmetic Exception) s jiným typem třídy výjimky (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'); } }Otestujte to hned
Výstup:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
Příklad 9
Podívejme se na příklad zpracování další nekontrolované výjimky.
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'); } }Otestujte to hned
Výstup:
java.lang.ArrayIndexOutOfBoundsException: 10 rest of the code
Příklad 10
Podívejme se na příklad zpracování kontrolované výjimky.
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'); } }Otestujte to hned
Výstup:
File saved successfully