Java Multi-catch блок
Блокът try може да бъде последван от един или повече блокове catch. Всеки catch блок трябва да съдържа различен манипулатор на изключения. Така че, ако трябва да изпълнявате различни задачи при възникване на различни изключения, използвайте java multi-catch блок.
Точки за запомняне
- В даден момент възниква само едно изключение и в даден момент се изпълнява само един catch блок.
- Всички catch блокове трябва да бъдат подредени от най-специфични към най-общи, т.е. catch за ArithmeticException трябва да идва преди catch за Exception.
Блок-схема на Multi-catch блок
Пример 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