Merkede og ukontrollerte unntak i Java

1. Oversikt

Java-unntak faller inn i to hovedkategorier: sjekket unntak og ukontrollerte unntak. I denne artikkelen vil vi gi noen kodeeksempler på hvordan du bruker dem.

2. Sjekket unntak

Generelt representerer avmerkede unntak feil utenfor kontrollen av programmet. For eksempel, konstruktøren av FileInputStream kaster FileNotFoundException hvis inndatafilen ikke eksisterer.

Java verifiserer sjekket unntak ved kompileringstid.

Derfor bør vi bruke kaster nøkkelord for å erklære et merket unntak:

privat statisk ugyldig kontrollertExceptionWithThrows () kaster FileNotFoundException {File file = new File ("not_existing_file.txt"); FileInputStream stream = ny FileInputStream (fil); }

Vi kan også bruke en prøvefangst blokk for å håndtere et avkrysset unntak:

privat statisk ugyldig kontrollertExceptionWithTryCatch () {File file = new File ("not_existing_file.txt"); prøv {FileInputStream stream = new FileInputStream (file); } fange (FileNotFoundException e) {e.printStackTrace (); }}

Noen vanlige sjekket unntak i Java er IO Unntak, SQLException, og ParseException.

De Unntak klasse er superklassen med avmerkede unntak. Derfor kan vi lage et tilpasset kontrollert unntak ved å utvide det Unntak:

offentlig klasse IncorrectFileNameException utvider unntak {public IncorrectFileNameException (String errorMessage) {super (errorMessage); }} 

3. Uavmerkede unntak

Hvis et program kaster et unchecked unntak, gjenspeiler det en feil i programlogikken. Hvis vi for eksempel deler et tall med 0, vil Java kaste Aritmetisk unntak:

privat statisk tomrom divideByZero () {int teller = 1; int nevner = 0; int resultat = teller / nevner; } 

Java verifiserer ikke ukontrollerte unntak på kompileringstidspunktet. Videre trenger vi ikke å erklære ukontrollerte unntak i en metode med kaster nøkkelord. Og selv om koden ovenfor ikke har noen feil under kompileringstiden, vil den kaste Aritmetisk unntak ved kjøretid.

Noen vanlige ukontrollerte unntak i Java er NullPointerException, ArrayIndexOutOfBoundsException, og IllegalArgumentException.

De RuntimeException klasse er superklassen for alle ukontrollerte unntak. Derfor kan vi opprette et tilpasset unchecked unntak ved å utvide RuntimeException:

offentlig klasse NullOrEmptyException utvider RuntimeException {public NullOrEmptyException (String errorMessage) {super (errorMessage); }}

4. Når skal du bruke avmerkede unntak og ukontrollerte unntak

Det er en god praksis å bruke unntak i Java, slik at vi kan skille feilhåndteringskode fra vanlig kode. Vi må imidlertid bestemme hvilken type unntak vi skal kaste. Oracle Java Documentation gir veiledning om når du skal bruke merkede unntak og ukontrollerte unntak:

“Hvis det med rimelighet kan forventes at en klient kommer seg fra et unntak, må du gjøre det til et kontrollert unntak. Hvis en klient ikke kan gjøre noe for å komme seg fra unntaket, må du gjøre det til et ukontrollert unntak. ”

Før vi for eksempel åpner en fil, kan vi først validere navnet på inndatafilen. Hvis brukernavnet filnavn er ugyldig, kan vi kaste et tilpasset kontrollert unntak:

if (! isCorrectFileName (fileName)) {throw new IncorrectFileNameException ("Feil filnavn:" + filnavn); } 

På denne måten kan vi gjenopprette systemet ved å godta et annet brukernavn for filinngang. Imidlertid, hvis inndatafilnavnet er en nullpeker eller det er en tom streng, betyr det at vi har noen feil i koden. I dette tilfellet bør vi kaste et unchecked unntak:

if (fileName == null || fileName.isEmpty ()) {throw new NullOrEmptyException ("Filnavnet er null eller tomt."); } 

5. Konklusjon

I denne artikkelen diskuterte vi forskjellen mellom avmerkede og ukontrollerte unntak. Vi ga også noen kodeeksempler for å vise når du skal bruke avmerkede eller ukontrollerte unntak.

Som alltid kan all kode som finnes i denne artikkelen finnes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found