Java zachytáva viac výnimiek

V tomto tutoriále sa naučíme narábať s viacerými výnimkami v Jave pomocou príkladov.

Pred jazykom Java 7 sme museli napísať viac kódov na spracovanie výnimiek pre rôzne typy výnimiek, aj keď došlo k redundancii kódu.

Zoberme si príklad.

Príklad 1: Viacero blokov úlovku

 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()); ) ) ) 

Výkon

 / nulou 

V tomto príklade sa môžu vyskytnúť dve výnimky:

  • ArithmeticException pretože sa pokúšame rozdeliť číslo na 0.
  • ArrayIndexOutOfBoundsException pretože sme deklarovali nové celočíselné pole s hranicami poľa 0 až 9 a pokúšame sa priradiť hodnotu indexu 10.

Tlačíme správu o výnimke v obidvoch catchblokoch, tj. Duplikát kódu.

Asociativita operátora priradenia =je sprava doľava, preto ArithmeticExceptionsa najskôr hodí správa so správou / o nulu.

Spracovať viac výnimiek v bloku catch

V prostredí Java SE 7 a novších verziách teraz môžeme zachytiť viac ako jeden typ výnimky v jednom catchbloku.

Každý typ výnimky, ktorý môže catchblok spracovať, je oddelený pomocou zvislej čiary alebo rúry |.

Jeho syntax je:

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

Príklad 2: Blok s viacerými úlovkami

 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()); ) ) ) 

Výkon

 / nulou 

Zachytenie viacerých výnimiek v jednom catchbloku znižuje duplikáciu kódu a zvyšuje efektivitu.

Bajtkód vygenerovaný pri kompilácii tohto programu bude menší ako program s viacerými catchblokmi, pretože nedochádza k redundancii kódu.

Poznámka: Ak catchblok spracováva viac výnimiek, parameter catch je implicitne final. To znamená, že parametrom úlovku nemôžeme priradiť žiadne hodnoty.

Základňa výlovu Výnimka

Pri chytaní viacerých výnimiek do jedného catchbloku sa pravidlo zovšeobecní na špecializované.

To znamená, že ak v catchbloku existuje hierarchia výnimiek , môžeme základnú výnimku zachytiť iba namiesto chytania viacerých špecializovaných výnimiek.

Zoberme si príklad.

Príklad 3: Chytanie iba základnej triedy výnimiek

 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()); ) ) ) 

Výkon

 / nulou 

Vieme, že všetky triedy výnimiek sú podtriedami Exceptiontriedy. Takže namiesto toho, aby sme chytili viac špecializovaných výnimiek, môžeme Exceptiontriedu jednoducho chytiť .

Ak už bola v catchbloku zadaná základná trieda výnimiek , nepoužívajte v tom istom catchbloku podradené triedy výnimiek . V opačnom prípade sa zobrazí chyba kompilácie.

Zoberme si príklad.

Príklad 4: Chytanie základných a podradených tried výnimiek

 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()); ) ) ) 

Výkon

 Main.java:6: chyba: Alternatívy vo vyhlásení o viacerých úlovkoch nemôžu byť spojené podtriedou 

V tomto príklade, ArithmeticExceptiona ArrayIndexOutOfBoundsExceptionsú obaja podtriedy Exceptiontriedy. Dostali sme teda chybu kompilácie.

Zaujímavé články...