Java ujame več izjem

V tej vadnici se bomo s pomočjo primerov naučili obvladovanja več izjem v Javi.

Pred Java 7 smo morali napisati več kod za obdelavo izjem za različne vrste izjem, tudi če je bila odvečna.

Vzemimo primer.

Primer 1: Več blokov ulova

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (ArithmeticException e) ( System.out.println(e.getMessage()); ) catch (ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Izhod

 / za nič 

V tem primeru se lahko pojavita dve izjemi:

  • ArithmeticException ker poskušamo število deliti z 0.
  • ArrayIndexOutOfBoundsException ker smo razglasili novo celoštevilsko matriko z mejami matrike od 0 do 9 in poskušamo indeksu dodeliti vrednost.

V obeh catchblokih izpisujemo sporočilo o izjemi, tj. Podvojeno kodo.

Asociativnost operaterja dodelitve =je od desne proti levi, zato ArithmeticExceptionse najprej vrne an s sporočilom / z ničlo.

Obravnavajte več izjem v bloku za ulov

V Java SE 7 in novejših različicah lahko zdaj v enem catchbloku ujamemo več vrst izjem .

Vsaka izjema, ki jo lahko obravnava catchblok, je ločena z navpično palico ali cevjo |.

Njegova sintaksa je:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block ) 

Primer 2: Blok z več ulovi

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (ArithmeticException | ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Izhod

 / za nič 

Ulov več izjem v enem catchbloku zmanjša podvajanje kode in poveča učinkovitost.

Bajtna koda, ustvarjena med prevajanjem tega programa, bo manjša od programa, ki ima več catchblokov, saj ni odvečne kode.

Opomba: Če catchblok obravnava več izjem, je parameter ulova implicitno final. To pomeni, da za ulov parametrov ne moremo dodeliti nobenih vrednosti.

Osnova za lovljenje Izjema

Pri ulovu več izjem v enem catchbloku je pravilo posplošeno na specializirano.

To pomeni, da če v catchbloku obstaja hierarhija izjem , lahko ujamemo samo osnovno izjemo, namesto da bi ujeli več specializiranih izjem.

Vzemimo primer.

Primer 3: Ulov samo osnovnega razreda izjem

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (Exception e) ( System.out.println(e.getMessage()); ) ) ) 

Izhod

 / za nič 

Vemo, da so vsi razredi izjem podrazredi Exceptionrazreda. Namesto da bi ujeli več specializiranih izjem, lahko preprosto ujamemo Exceptionrazred.

Če je bil v catchbloku že podan osnovni razred izjem, v istem catchbloku ne uporabljajte podrejenih razredov izjem . V nasprotnem primeru bomo dobili napako pri prevajanju.

Vzemimo primer.

Primer 4: Ujeti osnovne in otroške razrede izjem

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Izhod

 Main.java:6: napaka: Alternativ v stavku z več ulovi ni mogoče povezati s podrazvrstitvijo 

V tem primeru, ArithmeticExceptionin ArrayIndexOutOfBoundsExceptionsta podrazredi v Exceptionrazredu. Tako dobimo napako pri sestavljanju.

Zanimive Članki...