Java uhvati višestruke iznimke

U ovom uputstvu naučit ćemo obrađivati ​​višestruke iznimke u Javi uz pomoć primjera.

Prije Jave 7, morali smo napisati više kodova za rukovanje iznimkama za različite vrste iznimaka, čak i ako je postojala suvišnost koda.

Uzmimo primjer.

Primjer 1: Više blokova 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()); ) ) ) 

Izlaz

 / po nuli 

U ovom primjeru mogu se dogoditi dvije iznimke:

  • ArithmeticException jer pokušavamo podijeliti broj s 0.
  • ArrayIndexOutOfBoundsException jer smo proglasili novi cjelobrojni niz s granicama polja 0 do 9 i pokušavamo dodijeliti vrijednost indeksu 10.

Ispisujemo poruku o iznimci u oba catchbloka, tj. Duplicirani kôd.

Asocijativnost operatora dodjele =je zdesna nalijevo, pa ArithmeticExceptionse prvo baca poruka s nulom.

Obrađivati ​​višestruke iznimke u bloku catch

U Javi SE 7 i novijim verzijama sada možemo uhvatiti više vrsta iznimki u jednom catchbloku.

Svaka vrsta iznimke s kojom catchblok može rukovati razdvaja se pomoću okomite šipke ili cijevi |.

Njegova sintaksa je:

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

Primjer 2: Blok s više ulova

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

Izlaz

 / po nuli 

Hvatanje višestrukih iznimaka u jednom catchbloku smanjuje dupliciranje koda i povećava učinkovitost.

Bajtkod stvoren tijekom sastavljanja ovog programa bit će manji od programa koji ima više catchblokova jer nema suvišne kode.

Napomena: Ako catchblok obrađuje višestruke iznimke, parametar catch je implicitno final. To znači da ne možemo dodijeliti nikakve vrijednosti za hvatanje parametara.

Baza za hvatanje Izuzetak

Prilikom hvatanja više iznimaka u jednom catchbloku, pravilo se generalizira na specijalizirano.

To znači da ako u catchbloku postoji hijerarhija izuzetaka , osnovnu iznimku možemo uhvatiti samo umjesto da uhvatimo višestruke specijalizirane iznimke.

Uzmimo primjer.

Primjer 3: Hvatanje samo osnovne klase iznimke

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

Izlaz

 / po nuli 

Znamo da su sve klase iznimki potklase Exceptionklase. Dakle, umjesto da uhvatimo višestruke specijalizirane iznimke, jednostavno možemo uhvatiti Exceptionklasu.

Ako je osnovna klasa iznimke već navedena u catchbloku, nemojte koristiti podređene klase iznimke u istom catchbloku. U suprotnom, dobit ćemo pogrešku u kompilaciji.

Uzmimo primjer.

Primjer 4: Hvatanje osnovne i podređene klase djece

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

Izlaz

 Main.java:6: pogreška: Alternative u naredbi s više ulova ne mogu se povezati potklasiranjem 

U ovom su primjeru ArithmeticExceptioni ArrayIndexOutOfBoundsExceptionobje potklase Exceptionklase. Dakle, dobivamo pogrešku u kompilaciji.

Zanimljivi članci...