Java valodā, izņēmums ir notikums, kas notiek programmas izpildes laikā un traucē normālu programmas instrukciju plūsmu. Kļūdas vai kļūdas, kuras mēs nevēlamies un ierobežo mūsu programmas parasto koda izpildi, tiek apzīmētas kā izņēmumi . Šajā sadaļā mēs koncentrēsimies uz izņēmumu veidi Java un atšķirības starp abiem.
Izņēmumus var iedalīt divos veidos:
- Iebūvētie izņēmumi
- Pārbaudīts izņēmums
- Izņēmums nav atzīmēts
- Lietotāja noteikti izņēmumi
Iebūvēts izņēmums
Izņēmumi kas jau ir pieejami Java bibliotēkas tiek saukti par iebūvēts izņēmums . Šie izņēmumi spēj definēt kļūdas situāciju, lai mēs varētu saprast šīs kļūdas rašanās iemeslu. To var iedalīt divās plašās kategorijās, t.i. pārbaudīti izņēmumi un neatzīmēts izņēmums .
Pārbaudīts izņēmums
Pārbaudīts tiek saukti izņēmumi kompilēšanas laiks izņēmumi, jo kompilators šos izņēmumus pārbauda kompilēšanas laikā. Kompilators nodrošina, vai programmētājs apstrādā izņēmumu vai nē. Programmētājam ir jārīkojas ar izņēmumu; pretējā gadījumā sistēma ir parādījusi kompilācijas kļūdu.
e r modeļu piemēri
PārbaudītsIzņēmumsExample.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(); } }
Iepriekš minētajā kodā mēs cenšamies izlasīt Sveiki.txt failu un parādīt tā datus vai saturu ekrānā. Programma rada šādus izņēmumus:
- The FileInputStream (faila faila nosaukums) konstruktors met FileNotFoundException tas ir pārbaudīts izņēmums.
- The lasīt () metode FileInputStream klase met IOIzņēmums .
- The aizvērt () metode arī izmet IOException.
Izvade:
Kā novērst kļūdu?
Pamatā ir divi veidi, kā mēs varam atrisināt šīs kļūdas.
algoritma dziļuma pirmā meklēšana
1) Izņēmumi notiek galvenajā metodē. Mēs varam atbrīvoties no šīm kompilācijas kļūdām, paziņojot izņēmumu galvenajā izmantotajā metodē metieni Mēs paziņojam tikai par IOException, nevis FileNotFoundException, jo pastāv bērna un vecāku attiecības. IOException klase ir FileNotFoundException vecāku klase, tāpēc šo izņēmumu automātiski attieksies IOException. Mēs paziņosim izņēmumu šādā veidā:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Ja mēs apkoposim un palaižam kodu, kļūdas pazudīs, un mēs redzēsim faila datus.
2) Mēs varam arī apstrādāt šos izņēmumus, izmantojot mēģināt-ķert Tomēr iepriekš izmantotais veids nav pareizs. Mums ir jāsniedz jēgpilns vēstījums katram izņēmuma veidam. To darot, būtu viegli saprast kļūdu. Mēs izmantosim try-catch bloku šādā veidā:
Izņēmums.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); } } }
Mēs redzēsim pareizu kļūdas ziņojumu 'Fails nav atrasts!' konsolē, jo šajā vietā šāda faila nav.
Neatzīmēti izņēmumi
The nav atzīmēts izņēmumi ir tieši pretēji pārbaudīts izņēmumi. Kompilators nepārbaudīs šos izņēmumus kompilēšanas laikā. Vienkāršiem vārdiem sakot, ja programma izdara nepārbaudītu izņēmumu un pat ja mēs to neapstrādājām vai nedeklarētu, programma nesniegs kompilācijas kļūdu. Parasti tas notiek, ja lietotājs mijiedarbības laikā ar programmu sniedz sliktus datus.
Piezīme. Klase RuntimeException var atrisināt visus neatzīmētos izņēmumus bērnu un vecāku attiecību dēļ.
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); } }
Iepriekš minētajā programmā mēs esam sadalījuši 35 ar 0. Kods tiks veiksmīgi apkopots, taču izpildes laikā tas radīs Aritmētiskā izņēmuma kļūdu. Dalot skaitli ar 0, tiek parādīts dalīt ar nulli izņēmums, kas ir izņēmuma atzīme.
Izvade:
java hashmap
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Izvade:
Iepriekš minētajā kodā mēs cenšamies iegūt elementu, kas atrodas 7. pozīcijā, bet masīva garums ir 6. Kods tiek veiksmīgi kompilēts, bet izpildes laikā izmet ArrayIndexOutOfBoundsException.
Lietotāja definēts izņēmums
In Java , mums jau ir dažas iebūvētas izņēmumu klases, piemēram, ArrayIndexOutOfBoundsException , NullPointerException , un Aritmētiskais izņēmums . Šie izņēmumi var tikt aktivizēti tikai dažos iepriekš definētos apstākļos. Programmā Java mēs varam uzrakstīt paši savu izņēmuma klasi, paplašinot izņēmuma klasi. Mēs varam izveidot savu izņēmumu konkrētam nosacījumam, izmantojot atslēgvārdu throw. Lai izveidotu lietotāja definētu izņēmumu, mums ir jābūt pamatzināšanām par uz mēģināt-ķert bloķēt un mest atslēgvārds .
Uzrakstīsim a Java programma un izveidot lietotāja definētu izņēmumu.
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) ; } }
Izvade:
Apraksts:
Iepriekš minētajā kodā esam izveidojuši divas klases, t.i., UserDefinedException un JaunsIzņēmums . The UserDefinedException ir mūsu galvenā metode, un JaunsIzņēmums klase ir mūsu lietotāja definēta izņēmumu klase, kas tiek paplašināta izņēmums . Iekš JaunsIzņēmums klasē, mēs izveidojam mainīgo x tipa vesels skaitlis un piešķiriet tam vērtību konstruktorā. Pēc vērtības piešķiršanas šim mainīgajam mēs atgriežam izņēmuma ziņojumu.
Iekš UserDefinedException klasē esam pievienojuši a mēģināt-ķert bloķēt. Izmēģināšanas sadaļā mēs izmetam izņēmumu, t.i., JaunsIzņēmums un nododiet tam veselu skaitli. Vērtība tiks nodota klasei NewException un atgriezīs ziņojumu. Mēs uztveram šo ziņojumu uztveršanas blokā un parādām to ekrānā.
anakonda vs pitona čūska
Atšķirība starp atzīmēto un neatzīmēto izņēmumu
Jā nē | Pārbaudīts izņēmums | Izņēmums nav atzīmēts |
---|---|---|
1. | Šie izņēmumi tiek pārbaudīti kompilēšanas laikā. Šie izņēmumi tiek apstrādāti arī kompilēšanas laikā. | Šie izņēmumi ir tieši pretēji pārbaudītajiem izņēmumiem. Šie izņēmumi netiek pārbaudīti un apstrādāti kompilēšanas laikā. |
2. | Šie izņēmumi ir tiešas izņēmumu apakšklases, bet nav paplašinātas no RuntimeException klases. | Tās ir RuntimeException klases tiešās apakšklases. |
3. | Kods dod kompilācijas kļūdu gadījumā, ja metode izmet pārbaudītu izņēmumu. Kompilators pats nevar tikt galā ar izņēmumu. | Kods tiek kompilēts bez kļūdām, jo kompilators nepamana izņēmumus. Šie izņēmumi ir lietotāja radītu programmēšanas loģikas kļūdu rezultāts. |
4. | Šie izņēmumi galvenokārt rodas, ja neveiksmes iespējamība ir pārāk augsta. | Šie izņēmumi galvenokārt rodas programmēšanas kļūdu dēļ. |
5. | Parasti pārbaudītie izņēmumi ir IOException, DataAccessException, InterruptedException utt. | Bieži vien neatzīmētie izņēmumi ir Aritmētiskais izņēmums, InvalidClassException, NullPointerException utt. |
6. | Šie izņēmumi tiek izplatīti, izmantojot atslēgvārdu throws. | Tie tiek automātiski izplatīti. |
7. | Lai apstrādātu pārbaudīto izņēmumu, ir jānodrošina try-catch un try-finally bloķēšana. | Nepārbaudīta izņēmuma gadījumā tas nav obligāts. |
Kļūdas vai kļūdas, kuras mēs nevēlamies un ierobežo normālu programmu izpildi, tiek sauktas par izņēmumi .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions utt. ir iekļauti kategorijā Iebūvēts izņēmums . Dažreiz iebūvētie izņēmumi nav pietiekami, lai izskaidrotu vai aprakstītu noteiktas situācijas. Lai aprakstītu šīs situācijas, mums ir jāizveido savi izņēmumi, izveidojot izņēmumu klasi kā apakšklasi Izņēmums klasē. Šāda veida izņēmumi ietilpst kategorijā Lietotāja definēts izņēmums .