Hozzon létre egy egyedi kivételt a Java-ban
1. Bemutatkozás
Ebben az oktatóanyagban bemutatjuk hogyan lehet egyedi kivételt létrehozni a Java-ban.
Megmutatjuk, hogy a felhasználó által definiált kivételeket hogyan hajtják végre és használják mind bejelölt, mind pedig nem ellenőrzött kivételek esetén.
2. Az egyedi kivételek szükségessége
A Java-kivételek szinte minden általános kivételre kiterjednek, amelyek a programozás során bekövetkeznek.
Néha azonban ezeket a szokásos kivételeket ki kell egészítenünk a sajátjainkkal.
Az egyedi kivételek bevezetésének fő okai a következők:
- Üzleti logikai kivételek - az üzleti logikára és a munkafolyamatra jellemző kivételek. Ezek segítenek az alkalmazás felhasználóinak vagy a fejlesztőknek megérteni, mi a pontos probléma
- A meglévő Java-kivételek egy részének felzárkóztatása és speciális kezelése
A Java kivételek ellenőrizhetők és nem ellenőrizhetők. A következő szakaszokban ezekre az esetekre térünk ki.
3. Egyedi ellenőrzött kivétel
Az ellenőrzött kivételek olyan kivételek, amelyeket kifejezetten kezelni kell.
Vegyünk egy kódrészletet, amely a fájl első sorát adja vissza:
próbáld meg (Szkennerfájl = új Szkenner (új Fájl (fájlNév))) {if (file.hasNextLine ()) return file.nextLine (); } catch (FileNotFoundException e) {// Naplózás stb.}
A fenti kód klasszikus módon kezeli a Java által ellenőrzött kivételeket. Amíg a kód dob FileNotFoundException, nem világos, mi a pontos oka - függetlenül attól, hogy a fájl nem létezik, vagy a fájl neve érvénytelen.
Egyedi kivétel létrehozásához ki kell terjesztenünk a java.lang.Kivétel osztály.
Lássunk erre egy példát az úgynevezett egyedi ellenőrzött kivétel létrehozásával IncorrectFileNameException:
public class Az IncorrectFileNameException kiterjeszti a Kivételt {public IncorrectFileNameException (String errorMessage) {super (errorMessage); }}
Ne feledje, hogy meg kell adnunk egy konstruktort is, amely a Húr hibaüzenetként, és felhívta a szülő osztály konstruktort.
Ennyit kell tennünk egy egyedi kivétel definiálásához.
Ezután nézzük meg, hogyan használhatjuk az egyedi kivételt a példánkban:
próbáld meg (Szkennerfájl = új Szkenner (új Fájl (fájlNév))) {if (file.hasNextLine ()) return file.nextLine (); } catch (FileNotFoundException e) {if (! isCorrectFileName (fileName)) {dobja be az új IncorrectFileNameException szót ("Helytelen fájlnév:" + fájlnév); } // ...}
Hoztunk létre és használtunk egy egyedi kivételt, így a felhasználó most már tudja, mi a pontos kivétel. Ez elég? Következésképpen vagyunk a kivétel kiváltó okának elvesztése.
Ennek kijavításához felvehetünk egy a-t is java.lang.Hajítható paraméter a konstruktornak. Így átadhatjuk a gyökér kivételt a metódus hívásának:
public IncorrectFileNameException (String errorMessage, Throwable err) {szuper (errorMessage, err); }
Most a IncorrectFileNameException a kivétel kiváltó okával együtt használatos:
próbáld meg (Szkennerfájl = új Szkenner (új Fájl (fájlNév))) {if (fájl.hasNextLine ()) {return file.nextLine (); }} catch (FileNotFoundException tévedés) {if (! isCorrectFileName (fájlNév)) {dobjon új IncorrectFileNameException ("Helytelen fájlnév:" + fájlnév, hibás); } // ...}
Így használhatjuk az egyedi kivételeket anélkül, hogy elveszítenék a kiváltó okot.
4. Egyéni nem ellenőrzött kivétel
Tegyük fel, hogy ugyanabban a példában egyedi kivételre van szükségünk, ha a fájlnév nem tartalmaz kiterjesztést.
Ebben az esetben szükségünk lesz egy, az előzőhöz hasonló, nem ellenőrzött kivételre, mivel ezt a hibát csak futás közben észleljük.
Egyedi, nem ellenőrzött kivétel létrehozásához ki kell terjesztenünk a java.lang.RuntimeException osztály:
public class Az IncorrectFileExtensionException kiterjeszti a RuntimeException {public IncorrectFileExtensionException (String errorMessage, Throwable err) {super (errorMessage, err); }}
Ezért a példánkban használhatjuk ezt az egyedi, nem ellenőrzött kivételt:
próbáld meg (Szkennerfájl = új Szkenner (új Fájl (fájlnév))) {if (fájl.hasNextLine ()) {return file.nextLine (); } else {dob új IllegalArgumentException ("Nem olvasható fájl"); }} catch (FileNotFoundException tévedés) {if (! isCorrectFileName (fájlNév)) {dobjon új IncorrectFileNameException ("Helytelen fájlnév:" + fájlnév, hibás); } // ...} catch (IllegalArgumentException tévedés) {if (! tartalmazzaExtension (fájlnév)) {dob új IncorrectFileExtensionException ("A fájlnév nem tartalmaz kiterjesztést:" + fájlnév, hibás); } // ...}
5. Következtetés
Az egyedi kivételek nagyon hasznosak, ha az üzleti logikához kapcsolódó konkrét kivételeket kell kezelnünk. Megfelelő használatuk esetén hasznos eszközként szolgálhatnak a jobb kivételkezeléshez és naplózáshoz.
A cikkben használt példák kódja elérhető a Github oldalon.