Stvorite prilagođenu iznimku u Javi

1. Uvod

U ovom ćemo uputstvu pokriti kako stvoriti prilagođenu iznimku u Javi.

Pokazat ćemo kako se primjenjuju korisnički definirane iznimke i koriste i za potvrđene i za neprovjerene iznimke.

2. Potreba za prilagođenim iznimkama

Iznimke Java pokrivaju gotovo sve općenite iznimke koje će se sigurno dogoditi u programiranju.

Međutim, ponekad moramo standardne iznimke dopuniti vlastitim.

Glavni razlozi za uvođenje prilagođenih izuzetaka su:

  • Iznimke iz poslovne logike - iznimke koje su specifične za poslovnu logiku i tijek rada. Oni pomažu korisnicima aplikacije ili programerima da shvate u čemu je točno problem
  • Uhvatiti i pružiti specifičan tretman podskupu postojećih Java izuzetaka

Java iznimke mogu se provjeriti i odznačiti. U sljedećim ćemo odjeljcima pokriti oba ova slučaja.

3. Prilagođena provjerena iznimka

Označene iznimke su iznimke koje treba izričito tretirati.

Razmotrimo dio koda koji vraća prvi redak datoteke:

probajte (Datoteka skenera = novi Skener (nova Datoteka (imeDatoteke)))) {ako (datoteka.hasNextLine ()) vrati datoteku.nextLine (); } catch (FileNotFoundException e) {// Prijava, itd.} 

Gornji kod klasičan je način postupanja s iznimkama provjerenim Javom. Dok kod baca FileNotFoundException, nije jasno koji je točan uzrok - postoji li datoteka ili je naziv datoteke nevaljan.

Da bismo stvorili prilagođenu iznimku, moramo proširiti java.lang.Izuzetak razred.

Pogledajmo primjer toga stvaranjem prilagođene provjerene iznimke zvane IncorrectFileNameException:

javna klasa IncorrectFileNameException proširuje Exception {public IncorrectFileNameException (String errorMessage) {super (errorMessage); }} 

Imajte na umu da također moramo osigurati konstruktor koji uzima a Niz kao poruka o pogrešci i nazvan konstruktor nadređene klase.

To je sve što trebamo učiniti da definiramo prilagođenu iznimku.

Dalje, pogledajmo kako možemo koristiti prilagođenu iznimku u našem primjeru:

probajte (Datoteka skenera = novi Skener (nova Datoteka (imeDatoteke)))) {if (file.hasNextLine ()) vrati datoteku.nextLine (); } catch (FileNotFoundException e) {if (! isCorrectFileName (fileName)) {throw new IncorrectFileNameException ("Netočno ime datoteke:" + FileName); } // ...} 

Stvorili smo i koristili prilagođenu iznimku, tako da korisnik sada može znati koja je točna iznimka. Je li to dovoljno? Posljedično jesmo gubeći osnovni uzrok iznimke.

Da bismo to popravili, možemo dodati i java.lang.Može se baciti parametar konstruktoru. Na ovaj način, korijensku iznimku možemo proslijediti pozivu metode:

javni IncorrectFileNameException (String errorMessage, greška u bacanju) {super (errorMessage, err); } 

Sada, IncorrectFileNameException koristi se zajedno s osnovnim uzrokom iznimke poput ove:

isprobajte (datoteka skenera = novi skener (nova datoteka (ime datoteke))) {if (file.hasNextLine ()) {return file.nextLine (); }} catch (FileNotFoundException error) {if (! isCorrectFileName (fileName)) {throw new IncorrectFileNameException ("Netočno ime datoteke:" + FileName, pogreška); } // ...} 

Na ovaj način možemo koristiti prilagođene iznimke bez gubitka osnovnog uzroka iz kojeg su nastali.

4. Prilagođena neprovjerena iznimka

U našem istom primjeru, pretpostavimo da nam je potrebna prilagođena iznimka ako naziv datoteke ne sadrži nikakvo proširenje.

U ovom će nam slučaju trebati prilagođena neprovjerena iznimka slična sličnoj prethodnoj, jer će se ova pogreška otkriti samo tijekom izvođenja.

Da bismo stvorili prilagođenu neprovjerenu iznimku, moramo proširiti java.lang.RuntimeException razred:

javna klasa IncorrectFileExtensionException proširuje RuntimeException {public IncorrectFileExtensionException (String errorMessage, Throwable error) {super (errorMessage, err); }} 

Stoga u ovom primjeru možemo koristiti ovu prilagođenu neprovjerenu iznimku:

probajte (Datoteka skenera = novi Skener (nova Datoteka (imeDatoteke)))) {if (file.hasNextLine ()) {return file.nextLine (); } else {baciti novi IllegalArgumentException ("Nečitljiva datoteka"); }} catch (FileNotFoundException error) {if (! isCorrectFileName (fileName)) {throw new IncorrectFileNameException ("Neispravno ime datoteke: + ime datoteke, pogreška); } // ...} catch (IllegalArgumentException greška) {if (! containsExtension (fileName)) {throw new IncorrectFileExtensionException ("Naziv datoteke ne sadrži ekstenziju:" + FileName, pogreška); } // ...} 

5. Zaključak

Prilagođene iznimke itekako su korisne kada trebamo obraditi određene iznimke povezane s poslovnom logikom. Kada se pravilno koriste, mogu poslužiti kao koristan alat za bolje rukovanje iznimkama i evidentiranje.

Kôd za primjere korištene u ovom članku dostupan je na Githubu.