logo

Java try-catch blok

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ě

Java try-catch blok

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