logo

Java улавя множество изключения

Java Multi-catch блок

Блокът try може да бъде последван от един или повече блокове catch. Всеки catch блок трябва да съдържа различен манипулатор на изключения. Така че, ако трябва да изпълнявате различни задачи при възникване на различни изключения, използвайте java multi-catch блок.

Точки за запомняне

  • В даден момент възниква само едно изключение и в даден момент се изпълнява само един catch блок.
  • Всички catch блокове трябва да бъдат подредени от най-специфични към най-общи, т.е. catch за ArithmeticException трябва да идва преди catch за Exception.

Блок-схема на Multi-catch блок

Java улавя множество изключения

Пример 1

Нека да видим един прост пример за java multi-catch блок.

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'); } } 
Тествайте сега

Изход:

как да свържете низове в java
 Arithmetic Exception occurs rest of the code 

Пример 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'); } } 
Тествайте сега

Изход:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

В този пример блокът try съдържа две изключения. Но в даден момент възниква само едно изключение и съответният му блок 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'); } } 
Тествайте сега

Изход:

 Arithmetic Exception occurs rest of the code 

Пример 4

В този пример генерираме NullPointerException, но не предоставяме съответния тип изключение. В такъв случай блокът catch, съдържащ родителския клас изключение Изключение ще се извика.

MultipleCatchBlock4.java

java динамичен масив
 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'); } } 
Тествайте сега

Изход:

 Parent Exception occurs rest of the code 

Пример 5

Нека видим пример за обработка на изключението без поддържане на реда на изключенията (т.е. от най-специфичните към най-общите).

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...'); } } 
Тествайте сега

Изход:

 Compile-time error