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.