logo

Java przechwytuje wiele wyjątków

Blok wielokrotnego catch w Javie

Po bloku try może nastąpić jeden lub więcej bloków catch. Każdy blok catch musi zawierać inną procedurę obsługi wyjątków. Jeśli więc musisz wykonać różne zadania w przypadku wystąpienia różnych wyjątków, użyj bloku wielopołowowego Java.

Punkty do zapamiętania

  • W danej chwili występuje tylko jeden wyjątek i jednocześnie wykonywany jest tylko jeden blok catch.
  • Wszystkie bloki catch muszą być uporządkowane od najbardziej szczegółowego do najbardziej ogólnego, tj. catch dla wyjątku ArithmeticException musi nastąpić przed catch dla wyjątku.

Schemat blokowy bloku Multi-catch

Java przechwytuje wiele wyjątków

Przykład 1

Zobaczmy prosty przykład bloku multi-catch w Javie.

MultipleCatchBlock1.java

 public class MultipleCatchBlock1 { public static void main(String[] args) { try{ int a[]=new int[5]; a[5]=30/0; } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Przetestuj teraz

Wyjście:

JavaScript do rozwijania
 Arithmetic Exception occurs rest of the code 

Przykład 2

MultipleCatchBlock2.java

 public class MultipleCatchBlock2 { public static void main(String[] args) { try{ int a[]=new int[5]; System.out.println(a[10]); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Przetestuj teraz

Wyjście:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

W tym przykładzie blok try zawiera dwa wyjątki. Jednak w danej chwili występuje tylko jeden wyjątek i wykonywany jest odpowiadający mu blok catch.

MultipleCatchBlock3.java

 public class MultipleCatchBlock3 { public static void main(String[] args) { try{ int a[]=new int[5]; a[5]=30/0; System.out.println(a[10]); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Przetestuj teraz

Wyjście:

 Arithmetic Exception occurs rest of the code 

Przykład 4

W tym przykładzie generujemy wyjątek NullPointerException, ale nie podaliśmy odpowiedniego typu wyjątku. W takim przypadku blok catch zawierający nadrzędną klasę wyjątku Wyjątek zostanie wywołany.

MultipleCatchBlock4.java

wilk lub lis
 public class MultipleCatchBlock4 { public static void main(String[] args) { try{ String s=null; System.out.println(s.length()); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
Przetestuj teraz

Wyjście:

 Parent Exception occurs rest of the code 

Przykład 5

Zobaczmy przykład obsługi wyjątku bez zachowania kolejności wyjątków (tj. od najbardziej szczegółowego do najbardziej ogólnego).

MultipleCatchBlock5.java

 class MultipleCatchBlock5{ public static void main(String args[]){ try{ int a[]=new int[5]; a[5]=30/0; } catch(Exception e){System.out.println('common task completed');} catch(ArithmeticException e){System.out.println('task1 is completed');} catch(ArrayIndexOutOfBoundsException e){System.out.println('task 2 completed');} System.out.println('rest of the code...'); } } 
Przetestuj teraz

Wyjście:

 Compile-time error