Java fanger flere unntak

I denne opplæringen vil vi lære å håndtere flere unntak i Java ved hjelp av eksempler.

Før Java 7 måtte vi skrive flere unntakshåndteringskoder for forskjellige typer unntak selv om det var kodeunderskudd.

La oss ta et eksempel.

Eksempel 1: Flere fangstblokker

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

Produksjon

 / ved null 

I dette eksemplet kan to unntak forekomme:

  • ArithmeticException fordi vi prøver å dele et tall med 0.
  • ArrayIndexOutOfBoundsException fordi vi har deklarert et nytt heltall array med array grenser 0 til 9 og vi prøver å tilordne en verdi til indeks 10.

Vi skriver ut unntaksmeldingen i begge catchblokkene, dvs. duplikatkode.

Assosiativiteten til oppdragsoperatøren =er fra høyre mot venstre, så en ArithmeticExceptionblir kastet først med meldingen / av null.

Håndter flere unntak i en fangstblokk

I Java SE 7 og senere kan vi nå fange mer enn én type unntak i en enkelt catchblokk.

Hver unntakstype som kan håndteres av catchblokken, skilles ved hjelp av en vertikal stang eller et rør |.

Dens syntaks er:

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

Eksempel 2: Blokk med flere fangster

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

Produksjon

 / ved null 

Å fange flere unntak i en enkelt catchblokk reduserer duplisering av kode og øker effektiviteten.

Bytekoden som genereres under kompilering av dette programmet, vil være mindre enn at programmet har flere catchblokker, da det ikke er noen kodedundans.

Merk: Hvis en catchblokk håndterer flere unntak, er fangstparameteren implisitt final. Dette betyr at vi ikke kan tilordne noen verdier til fangstparametere.

Fangbase Unntak

Når du fanger flere unntak i en catchblokk, blir regelen generalisert til spesialisert.

Dette betyr at hvis det er et hierarki med unntak i catchblokken, kan vi bare fange basis unntaket i stedet for å fange flere spesialiserte unntak.

La oss ta et eksempel.

Eksempel 3: Bare fangstgrunnlagsundtakelse

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

Produksjon

 / ved null 

Vi vet at alle unntaksklassene er underklasser av Exceptionklassen. Så, i stedet for å fange flere spesialiserte unntak, kan vi ganske enkelt ta Exceptionklassen.

Hvis basen unntaksklassen allerede er spesifisert i catchblokken, må du ikke bruke barn unntaksklasser i den samme catchblokken. Ellers får vi en kompileringsfeil.

La oss ta et eksempel.

Eksempel 4: Fangstbase og unntaksklasser for barn

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

Produksjon

 Main.java:6: feil: Alternativer i en multi-catch-setning kan ikke relateres ved å underklasse 

I dette eksemplet, ArithmeticExceptionog ArrayIndexOutOfBoundsExceptioner begge underklasser av Exceptionklassen. Så vi får en kompileringsfeil.

Interessante artikler...