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:
ArithmeticExceptionker poskušamo število deliti z 0.ArrayIndexOutOfBoundsExceptionker 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.








