Ellenőrzött és nem ellenőrzött kivételek a Java-ban

1. Áttekintés

A Java kivételek két fő kategóriába sorolhatók: ellenőrzött kivételek és nem ellenőrzött kivételek. Ebben a cikkben néhány kódmintát adunk meg azok használatáról.

2. Ellenőrzött kivételek

Az ellenőrzött kivételek általában olyan hibákat jelentenek, amelyek kívül esnek a programon. Például a FileInputStream dob FileNotFoundException ha a bemeneti fájl nem létezik.

A Java fordításkor ellenőrzi az ellenőrzött kivételeket.

Ezért használnunk kell a dob kulcsszó egy bejelölt kivétel nyilvánításához:

private static void ellenőrzöttExceptionWithThrows () dobja a FileNotFoundException {File file = new File ("not_existing_file.txt"); FileInputStream stream = új FileInputStream (fájl); }

Használhatjuk a próbáld elkapni blokk egy ellenőrzött kivétel kezeléséhez:

private static void ellenőrzöttExceptionWithTryCatch () {File file = new File ("not_existing_file.txt"); próbálja meg a {FileInputStream stream = new FileInputStream (fájl); } catch (FileNotFoundException e) {e.printStackTrace (); }}

Néhány általános ellenőrzött kivétel a Java-ban IOException, SQLEkivétel, és ParseException.

A Kivétel osztály az ellenőrzött kivételek szuperosztálya. Ezért kiterjesztéssel létrehozhatunk egyedi ellenőrzött kivételt Kivétel:

public class Az IncorrectFileNameException kiterjeszti a Kivételt {public IncorrectFileNameException (String errorMessage) {super (errorMessage); }} 

3. Ellenőrizetlen kivételek

Ha egy program ellenőrizetlen kivételt dob, az a program logikáján belüli hibákat tükröz. Például, ha egy számot elosztunk 0-val, a Java dob Számtani kivétel:

privát statikus void divideByZero () {int számláló = 1; int nevező = 0; int eredmény = számláló / nevező; } 

A Java nem ellenőrzi a nem ellenőrzött kivételeket fordítási időben. Továbbá nem kell deklarálnunk nem ellenőrzött kivételeket a dob kulcsszó. És bár a fenti kódnak nincs hibája a fordítási idő alatt, dobni fog Számtani kivétel futás közben.

Néhány általános, ellenőrizetlen kivétel a Java-ban NullPointerException, ArrayIndexOutOfBoundsException, és IllegalArgumentException.

A RuntimeException osztály az összes ellenőrizetlen kivétel szuperosztálya. Ezért kiterjesztéssel létrehozhatunk egyedi, ellenőrizetlen kivételt RuntimeException:

public class NullOrEmptyException kiterjeszti a RuntimeException {public NullOrEmptyException (String errorMessage) {super (errorMessage); }}

4. Mikor kell használni az ellenőrzött kivételeket és az ellenőrizetlen kivételeket

Jó gyakorlat, ha a Java-ban kivételeket alkalmazunk, hogy a hibakezelő kódot el tudjuk különíteni a normál kódtól. El kell döntenünk azonban, hogy milyen típusú kivételt dobunk. Az Oracle Java Documentation útmutatást ad arról, hogy mikor kell használni a bejelölt és a be nem ellenőrzött kivételeket:

„Ha az ügyféltől ésszerűen elvárható, hogy felépüljön egy kivételből, tegye azt bejelölt kivétellé. Ha az ügyfél nem tehet semmit a kivétel alól való kilábalásért, tegye azt ellenőrizetlen kivétellé.

Például, mielőtt megnyitnánk egy fájlt, először ellenőrizhetjük a bemeneti fájl nevét. Ha a felhasználói beviteli fájl neve érvénytelen, dobhatunk egy egyéni ellenőrzött kivételt:

if (! isCorrectFileName (fájlNév)) {dobjon új IncorrectFileNameException ("Helytelen fájlnév:" + fájlnév); } 

Ily módon helyreállíthatjuk a rendszert egy másik felhasználói bemeneti fájlnév elfogadásával. Ha azonban a bemeneti fájl neve null mutató vagy üres karakterlánc, ez azt jelenti, hogy vannak hibáink a kódban. Ebben az esetben ellenőrizetlen kivételt kell vetnünk:

if (fájlnév == null || fájlnév.isEmpty ()) {dobjon új NullOrEmptyException ("A fájlnév üres vagy üres."); } 

5. Következtetés

Ebben a cikkben megvitattuk a különbséget az ellenőrzött és nem ellenőrzött kivételek között. Néhány kód példát is bemutattunk, amelyek megmutatják, hogy mikor kell használni a be nem jelölt kivételeket.

Mint mindig, a cikkben található összes kód megtalálható a GitHubon.