V Javi, izjema je dogodek, ki se zgodi med izvajanjem programa in zmoti normalen potek navodil programa. Hrošči ali napake, ki jih ne želimo in omejujejo normalno izvajanje kode našega programa, se imenujejo izjeme . V tem razdelku se bomo osredotočili na vrste izjem v Javi in razlike med obema.
Izjeme je mogoče razvrstiti na dva načina:
- Vgrajene izjeme
- Preverjena izjema
- Nepreverjena izjema
- Uporabniško določene izjeme
Vgrajena izjema
Izjeme ki so že na voljo v knjižnice Java se imenujejo vgrajena izjema . Te izjeme lahko definirajo napako, tako da lahko razumemo razlog za pojav te napake. Lahko ga razvrstimo v dve široki kategoriji, tj. preverjene izjeme in nepreverjena izjema .
Preverjena izjema
Preverjeno kličejo se izjeme čas prevajanja izjeme, ker te izjeme v času prevajanja preveri prevajalnik. Prevajalnik zagotavlja, ali programer obravnava izjemo ali ne. Programer bi moral obravnavati izjemo; sicer je sistem prikazal napako pri prevajanju.
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(); } }
V zgornji kodi poskušamo prebrati Pozdravljeni.txt datoteko in prikaže njene podatke ali vsebino na zaslonu. Program vrže naslednje izjeme:
Igralka Rubina Dilaik
- The FileInputStream(datoteka ime datoteke) konstruktor vrže FileNotFoundException to je preverjena izjema.
- The preberi() metoda FileInputStream razred vrže IOException .
- The zapri() vrže tudi izjemo IOException.
Izhod:
Kako odpraviti napako?
Te napake lahko odpravimo na dva načina.
1) Izjeme se pojavljajo pri glavni metodi. Teh napak pri prevajanju se lahko znebimo tako, da v glavni metodi razglasimo izjemo meti Razglasimo samo izjemo IOException, ne pa FileNotFoundException, zaradi razmerja otrok-starš. Razred IOException je nadrejeni razred FileNotFoundException, zato bo ta izjema samodejno pokrita z IOException. Izjemo bomo razglasili na naslednji način:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Če prevedemo in zaženemo kodo, bodo napake izginile in videli bomo podatke datoteke.
2) Te izjeme lahko obravnavamo tudi z uporabo poskusi-ulovi Vendar način, ki smo ga uporabili zgoraj, ni pravilen. Za vsako vrsto izjeme moramo dati smiselno sporočilo. S tem bi zlahka razumeli napako. Blok try-catch bomo uporabili na naslednji način:
Izjema.java
javascript večvrstični niz
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); } } }
Videli bomo ustrezno sporočilo o napaki 'Datoteka ni najdena!' na konzoli, ker na tem mestu ni take datoteke.
Nepreverjene izjeme
The nepreverjeno izjeme so ravno nasprotne preverjeno izjeme. Prevajalnik ne bo preverjal teh izjem med prevajanjem. Preprosto povedano, če program vrže nepreverjeno izjemo in tudi če je nismo obravnavali ali deklarirali, program ne bo izdal napake pri prevajanju. Običajno se pojavi, ko uporabnik med interakcijo s programom posreduje slabe podatke.
Opomba: Razred RuntimeException lahko razreši vse nepreverjene izjeme zaradi razmerja otrok-starš.
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); } }
V zgornjem programu smo 35 delili z 0. Koda bi bila uspešno prevedena, vendar bo med izvajanjem vrgla napako ArithmeticException. Pri deljenju števila z 0 vrže izjemo deljenja z ničlo, ki je izjema za odznak.
Izhod:
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Izhod:
java zbirke
V zgornji kodi poskušamo pridobiti element na položaju 7, vendar je dolžina niza 6. Koda se uspešno prevede, vendar med izvajanjem vrže izjemo ArrayIndexOutOfBoundsException.
Uporabniško določena izjema
notri Java , že imamo nekaj vgrajenih razredov izjem, kot je ArrayIndexOutOfBoundsException , NullPointerException , in ArithmeticException . Te izjeme so omejene na sprožitev ob nekaterih vnaprej določenih pogojih. V Javi lahko napišemo lasten razred izjem, tako da razširimo razred Izjema. Svojo lastno izjemo lahko sprožimo pri določenem pogoju s ključno besedo throw. Za ustvarjanje uporabniško definirane izjeme moramo imeti osnovno znanje the poskusi-ulovi blok in metati ključna beseda .
Napišimo a Java program in ustvarite uporabniško določeno izjemo.
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) ; } }
Izhod:
Opis:
V zgornji kodi smo ustvarili dva razreda, tj. UserDefinedException in NewException . The UserDefinedException ima našo glavno metodo in NewException je naš uporabniško definiran razred izjem, ki se razširja izjema . V NewException razreda ustvarimo spremenljivko x tipa integer in mu dodelite vrednost v konstruktorju. Ko tej spremenljivki dodelimo vrednost, vrnemo sporočilo o izjemi.
V UserDefinedException razreda smo dodali a poskusi-ulovi blok. V razdelku poskusa vržemo izjemo, tj. NewException in ji posredujte celo število. Vrednost bo posredovana razredu NewException in vrnila sporočilo. To sporočilo ujamemo v bloku catch in ga prikažemo na zaslonu.
znova zaženite mysql ubuntu
Razlika med označeno in nepreverjeno izjemo
da ne | Preverjena izjema | Nepreverjena izjema |
---|---|---|
1. | Te izjeme se preverijo med prevajanjem. Te izjeme se obravnavajo tudi v času prevajanja. | Te izjeme so ravno nasprotne označenim izjemam. Te izjeme se med prevajanjem ne preverjajo in ne obravnavajo. |
2. | Te izjeme so neposredni podrazredi izjeme, vendar niso razširjeni iz razreda RuntimeException. | So neposredni podrazredi razreda RuntimeException. |
3. | Koda daje napako prevajanja v primeru, ko metoda vrže preverjeno izjemo. Prevajalnik ne more sam obravnavati izjeme. | Koda se prevede brez kakršne koli napake, ker izjeme prevajalnik ne opazi. Te izjeme so rezultat napak v programski logiki, ki jih ustvarijo uporabniki. |
4. | Te izjeme se večinoma pojavijo, ko je verjetnost neuspeha prevelika. | Do teh izjem pride večinoma zaradi programskih napak. |
5. | Pogoste označene izjeme vključujejo IOException, DataAccessException, InterruptedException itd. | Pogoste nepreverjene izjeme vključujejo ArithmeticException, InvalidClassException, NullPointerException itd. |
6. | Te izjeme se razširijo s ključno besedo throws. | Te se samodejno razmnožujejo. |
7. | Za obravnavo preverjene izjeme je treba zagotoviti bloka try-catch in try-finally. | V primeru nepreverjene izjeme to ni obvezno. |
Hrošči ali napake, ki jih ne želimo in omejujejo normalno izvajanje programov, se imenujejo izjeme .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions itd. spadajo v kategorijo Vgrajena izjema . Včasih vgrajene izjeme ne zadostujejo za razlago ali opis določenih situacij. Za opisovanje teh situacij moramo ustvariti lastne izjeme z ustvarjanjem razreda izjem kot podrazreda Izjema razred. Te vrste izjem spadajo v kategorijo Uporabniško določena izjema .