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.