Java Multi-catch blok
Bloku poskusa lahko sledi en ali več blokov ulova. Vsak blok catch mora vsebovati drugačno obravnavo izjem. Torej, če morate izvajati različne naloge ob pojavu različnih izjem, uporabite java multi-catch block.
Točke, ki si jih je treba zapomniti
- Naenkrat se pojavi samo ena izjema in naenkrat se izvede samo en blok catch.
- Vsi bloki catch morajo biti razvrščeni od najbolj specifičnega do najbolj splošnega, tj. catch for ArithmeticException mora biti pred catch for Exception.
Diagram poteka bloka Multi-catch
Primer 1
Oglejmo si preprost primer java multi-catch bloka.
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'); } }Preizkusite zdaj
Izhod:
celoštevilska dvojna java
Arithmetic Exception occurs rest of the code
Primer 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'); } }Preizkusite zdaj
Izhod:
ArrayIndexOutOfBounds Exception occurs rest of the code
V tem primeru poskusni blok vsebuje dve izjemi. Toda naenkrat se pojavi samo ena izjema in njen ustrezen blok catch se izvede.
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'); } }Preizkusite zdaj
Izhod:
Arithmetic Exception occurs rest of the code
Primer 4
V tem primeru ustvarimo NullPointerException, vendar nismo zagotovili ustrezne vrste izjeme. V takem primeru blok catch, ki vsebuje nadrejeni razred izjeme Izjema bo priklican.
MultipleCatchBlock4.java
datotečni sistem v linuxu
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'); } }Preizkusite zdaj
Izhod:
Parent Exception occurs rest of the code
Primer 5
Oglejmo si primer obravnave izjeme brez vzdrževanja vrstnega reda izjem (tj. od najbolj specifičnega do najbolj splošnega).
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...'); } }Preizkusite zdaj
Izhod:
Compile-time error