Java nyelven, kivétel olyan esemény, amely egy program végrehajtása során következik be, és megzavarja a program utasításainak normál áramlását. Azokat a hibákat vagy hibákat, amelyeket nem akarunk, és korlátozzák programunk normál kódfuttatását, úgy hívjuk kivételek . Ebben a részben a típusú kivételek Java-ban és a kettő közötti különbségek.
A kivételeket kétféleképpen lehet csoportosítani:
- Beépített kivételek
- Ellenőrzött kivétel
- Nincs bejelölve Kivétel
- Felhasználó által meghatározott kivételek
Beépített kivétel
Kivételek amelyek már elérhetőek Java könyvtárak néven említik beépített kivétel . Ezek a kivételek képesek meghatározni a hibahelyzetet, hogy megértsük a hiba okát. Két nagy kategóriába sorolható, pl. ellenőrzött kivételek és ellenőrizetlen kivétel .
hashmap java-ban
Ellenőrzött kivétel
Ellenőrizve kivételeket nevezik összeállítási idő kivételek, mert ezeket a kivételeket fordításkor ellenőrzi a fordító. A fordító biztosítja, hogy a programozó kezeli-e a kivételt vagy sem. A programozónak kezelnie kell a kivételt; ellenkező esetben a rendszer fordítási hibát mutatott.
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } }
A fenti kódban megpróbáljuk elolvasni a Hello.txt fájlt, és megjeleníti annak adatait vagy tartalmát a képernyőn. A program a következő kivételeket dobja:
- A FileInputStream (fájl fájlnév) konstruktor dobja a FileNotFoundException ez ellenőrzött kivétel.
- A olvas() módszere a FileInputStream osztály dobja a IOException .
- A Bezárás() metódus az IOException-t is dobja.
Kimenet:
Hogyan lehet megoldani a hibát?
Alapvetően kétféleképpen tudjuk megoldani ezeket a hibákat.
1) A kivételek a fő módszerben fordulnak elő. Ezektől a fordítási hibáktól megszabadulhatunk, ha a fő metódusban deklaráljuk a kivételt a dobásokat Csak az IOException-t deklaráljuk, a FileNotFoundException kivételt nem, a gyermek-szülő kapcsolat miatt. Az IOException osztály a FileNotFoundException szülőosztálya, így ezt a kivételt automatikusan lefedi az IOException. A kivételt a következő módon hirdetjük ki:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Ha lefordítjuk és lefuttatjuk a kódot, a hibák eltűnnek, és látni fogjuk a fájl adatait.
2) Ezeket a kivételeket a használatával is kezelhetjük próba-elkapni A fentebb használt módszer azonban nem helyes. Minden kivételtípushoz értelmes üzenetet kell adnunk. Ezzel könnyen megérthető a hiba. A try-catch blokkot a következő módon fogjuk használni:
Kivétel.java
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } }
Megfelelő hibaüzenetet fogunk látni 'Fájl nem található!' a konzolon, mert azon a helyen nincs ilyen fájl.
Nincs bejelölve Kivételek
A ellenőrizetlen a kivételek éppen ellentétesek a ellenőrizve kivételek. A fordító nem ellenőrzi ezeket a kivételeket fordításkor. Egyszerűen fogalmazva, ha egy program nem ellenőrzött kivételt dob, és még ha nem is kezeltük vagy deklaráltuk volna, a program nem ad fordítási hibát. Általában akkor fordul elő, ha a felhasználó rossz adatokat közöl a programmal való interakció során.
Megjegyzés: A RuntimeException osztály képes feloldani az összes ellenőrizetlen kivételt a gyermek-szülő kapcsolat miatt.
UncheckedExceptionExample1.java
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } }
A fenti programban a 35-öt elosztottuk 0-val. A kód fordítása sikeresen megtörténik, de futás közben ArithmeticException hibát fog dobni. Ha egy számot elosztunk 0-val, akkor az osztás nullával kivételt dob, amely a bejelölés törlése.
Kimenet:
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Kimenet:
A fenti kódban a 7-es pozícióban lévő elemet próbáljuk megszerezni, de a tömb hossza 6. A kód sikeresen lefordítható, de futás közben kidobja az ArrayIndexOutOfBoundsException-t.
Felhasználó által meghatározott kivétel
Ban ben Jáva , már van néhány beépített kivételosztályunk, mint pl ArrayIndexOutOfBoundsException , NullPointerException , és Aritmetikai kivétel . Ezek a kivételek bizonyos előre meghatározott feltételekre korlátozódnak. A Java-ban saját kivételosztályunkat írhatjuk az Exception osztály kiterjesztésével. Egy adott feltételre saját kivételt dobhatunk a throw kulcsszó használatával. A felhasználó által definiált kivétel létrehozásához alapvető ismeretekkel kell rendelkeznünk a próba-elkapni blokk és dobás kulcsszó .
Írjunk a Java program és hozzon létre felhasználó által definiált kivételt.
UserDefinedException.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } }
Kimenet:
Leírás:
A fenti kódban két osztályt hoztunk létre, azaz UserDefinedException és ÚjKivétel . A UserDefinedException van a fő módszerünk, és a ÚjKivétel osztály a felhasználó által definiált kivételosztályunk, amely kiterjed kivétel . Ban,-ben ÚjKivétel osztályban létrehozunk egy változót x integer típusú, és rendeljen hozzá értéket a konstruktorban. Miután értéket adtunk a változóhoz, a kivétel üzenetet adjuk vissza.
Ban,-ben UserDefinedException osztályt adtuk hozzá a próba-elkapni Blokk. A try részben megdobjuk a kivételt, pl. ÚjKivétel és adj át neki egy egész számot. Az érték átadásra kerül a NewException osztálynak, és üzenetet ad vissza. Elkapjuk az üzenetet a fogásblokkban, és megjelenítjük a képernyőn.
javascript onload script
Különbség a bejelölt és a nem ellenőrzött kivétel között
Igen nem | Ellenőrzött kivétel | Nincs bejelölve Kivétel |
---|---|---|
1. | Ezeket a kivételeket a fordításkor ellenőrzik. Ezeket a kivételeket a fordításkor is kezeljük. | Ezek a kivételek éppen ellentétesek a bejelölt kivételekkel. Ezeket a kivételeket a rendszer nem ellenőrzi és nem kezeli a fordítás során. |
2. | Ezek a kivételek a kivétel közvetlen alosztályai, de nem bővíthetők ki a RuntimeException osztályból. | Ezek a RuntimeException osztály közvetlen alosztályai. |
3. | A kód fordítási hibát ad abban az esetben, ha egy metódus ellenőrzött kivételt dob. A fordítóprogram önmagában nem tudja kezelni a kivételt. | A kód hiba nélkül fordítódik, mert a kivételek elkerülik a fordító figyelmét. Ezek a kivételek a programozási logika felhasználó által létrehozott hibáinak következményei. |
4. | Ezek a kivételek többnyire akkor fordulnak elő, ha a meghibásodás valószínűsége túl magas. | Ezek a kivételek többnyire programozási hibák miatt következnek be. |
5. | A gyakori ellenőrzött kivételek közé tartozik az IOException, DataAccessException, InterruptedException stb. | A gyakori nem ellenőrzött kivételek közé tartozik az ArithmeticException, az InvalidClassException, a NullPointerException stb. |
6. | Ezek a kivételek a throws kulcsszó használatával kerülnek terjesztésre. | Ezeket automatikusan terjesztik. |
7. | Az ellenőrzött kivétel kezeléséhez meg kell adni a try-catch és a try-finally blokkolást. | Ellenőrizetlen kivétel esetén nem kötelező. |
Azokat a hibákat vagy hibákat, amelyeket nem akarunk, és korlátozzák a programok normál végrehajtását, úgy hívjuk kivételek .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions stb. kategóriába tartoznak Beépített kivétel . Néha a beépített kivételek nem elegendőek bizonyos helyzetek magyarázatához vagy leírásához. Ezeknek a helyzeteknek a leírásához létre kell hoznunk saját kivételeinket úgy, hogy létrehozunk egy kivételosztályt a Kivétel osztály. Az ilyen típusú kivételek a kategóriába tartoznak Felhasználó által meghatározott kivétel .