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.