kétféle kivétel létezik: ellenőrzött kivétel, nem ellenőrzött kivétel. Ebben az útmutatóban megvitatjuk őket. A fő különbség az ellenőrzött és a nem ellenőrzött kivétel között az, hogy az ellenőrzött kivételeket fordításkor ellenőrzik, míg a nem ellenőrzött kivételeket futásidőben ellenőrzik.
mik az ellenőrzött kivételek?
Az ellenőrzött kivételeket fordításkor ellenőrzik., Ez azt jelenti, hogy ha egy módszer ellenőrzött kivételt dob, akkor a kivételt a try-catch blokk segítségével kell kezelnie, vagy a kivételt a dobók kulcsszóval kell deklarálnia, különben a program összeállítási hibát ad.
lehetővé teszi, hogy megértsük ezt a segítségével egy példa:
ellenőrzött kivétel példa
ebben a példában olvasunk a fájl myfile.txt
és megjeleníti annak tartalmát a képernyőn. Ebben a programban három hely van, ahol ellenőrzött kivételt dobnak az alábbi megjegyzésekben említettek szerint., A fájl elérési útjának és nevének megadására használt FileInputStream FileNotFoundException
. A fájl tartalmát olvasó olvasási() metódus IOException
és a fájl bemeneti adatfolyamát lezáró close() metódus is dob IOException
.
kimenet:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
miért ez a fordítási hiba? Amint azt az elején említettem, hogy az ellenőrzött kivételeket a fordítási idő alatt ellenőrzik. Mivel nem kezeltük/deklaráltuk a kivételeket, programunk megadta az összeállítási hibát.
Hogyan lehet megoldani a hibát?, A hiba elkerülésének két módja van. Mindkét utat egyenként fogjuk látni.
1. módszer: állapítsa meg a kivételt dob kulcsszóval.
mint tudjuk, hogy mind a három előfordulását ellenőrzött kivételek belül fő() módszer, így az egyik módja annak, hogy elkerüljék a fordítási hiba: állapítsa meg a kivételt a módszer segítségével dob kulcsszó. Lehet, hogy úgy gondolja, hogy a kód dobott FileNotFoundException IOException mindkét akkor miért nyilvánítjuk a IOException egyedül. Ennek oka az, hogy az IOException a FileNotFoundException szülőosztálya, így alapértelmezés szerint lefedi ezt., Ha azt szeretnénk, akkor állapítsa meg őket, mint ez public static void main(String args) throws IOException, FileNotFoundException
.
kimenet:
a fájl tartalma megjelenik a képernyőn.
2. módszer: kezelje őket try-catch blokkokkal.
a fent használt megközelítés egyáltalán nem jó. Ez nem a legjobb kivétel kezelési gyakorlat. Minden kivételtípushoz értelmes üzenetet kell adnia, hogy valaki könnyen megértse a hibát. A kódnak így kell lennie:
Ez a kód jól fog futni, és megjeleníti a fájl tartalmát.,
itt van néhány más ellenőrzött kivétel –
SQLException
-
ClassNotFoundException
IOException
InvocationTargetException
mik a nem ellenőrzött kivételek?
a nem ellenőrzött kivételeket a fordításkor nem ellenőrzik. Ez azt jelenti, hogy ha a program nem ellenőrzött kivételt dob, és még akkor is, ha nem kezelte/deklarálta ezt a kivételt, a program nem ad összeállítási hibát. Legtöbbször ezek a kivételek a felhasználó által a felhasználói program interakciója során megadott rossz adatok miatt következnek be., A programozó feladata, hogy előre megítélje a feltételeket, ami ilyen kivételeket okozhat, és megfelelően kezelje azokat. Minden nem ellenőrzött kivétel a RuntimeException osztály közvetlen alosztályai.
lehetővé teszi, hogy megértsük ezt egy példa:
Unchecked Exception Example
ha lefordítani ezt a kódot, akkor lefordítani sikeresen azonban, ha futtatja, akkor dobja ArithmeticException
. Ez egyértelműen azt mutatja, hogy a nem ellenőrzött kivételeket nem ellenőrzik fordításkor, futásidőben fordulnak elő. Lássuk egy másik példát.,
Ez a kód is lefordítani sikeresen, mivel ArrayIndexOutOfBoundsException
is egy ellenőrizetlen kivétel.
Megjegyzés: Ez nem jelenti azt, hogy a fordító nem ellenőrzi ezeket a kivételeket, ezért nem szabad kezelni őket. Valójában jobban kellene kezelnünk őket. Például a fenti példában kivételnek kell lennie a felhasználó számára, hogy olyan értéket próbál megjeleníteni, amely nem létezik a tömbben, hogy a felhasználó képes legyen kijavítani a problémát.,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException