Hvad er undtagelse i Java?
Undtagelse i Java er en begivenhed, der afbryder udførelsen af programinstruktioner og forstyrrer den normale strøm af programudførelsen. Det er et objekt, der omslutter en fejlhændelsesinformation, der opstod inden for en metode, og den sendes til runtime-systemet. I Java bruges undtagelser hovedsageligt til at indikere forskellige typer fejltilstande.
I denne vejledning lærer du-
- Hvad er undtagelse?
- Hvorfor har vi brug for undtagelse?
- Sådan håndteres undtagelser
- Prøv Catch Block
- Java-undtagelsesklasser Hierarki
- Java Endelig Bloker
Der er to typer fejl:
- Kompilér tidsfejl
- Kørselsfejl
Kompileringstidsfejl kan igen klassificeres i to typer:
- Syntaksfejl
- Semantiske fejl
Syntaksfejl Eksempel:
I stedet for at erklære
int a;
du har fejlagtigt erklæret det in a;
for hvilken kompilator, der vil kaste en fejl.
Eksempel: Du har deklareret en variabel
int a;
og efter nogle kodelinjer erklærer du igen et heltal som int a;
. Alle disse fejl fremhæves, når du kompilerer koden.
Eksempel på kørselsfejl
En kørselsfejl kaldes en undtagelsesfejl . Det er enhver begivenhed, der afbryder den normale strøm af programudførelsen.
Eksempler på undtagelser er aritmetisk undtagelse, Nullpointer-undtagelse, divider med nul-undtagelse osv.
Undtagelser i Java er noget, der er uden for udviklerens kontrol.
Klik her, hvis videoen ikke er tilgængelig
Hvorfor har vi brug for undtagelse?
Antag at du har kodet et program for at få adgang til serveren. Ting fungerede fint, mens du udviklede koden.
Under den faktiske produktionskørsel er serveren nede. Når dit program forsøgte at få adgang til det, hæves en undtagelse.
Sådan håndteres undtagelser
Indtil videre har vi set, at undtagelse ligger uden for udviklerens kontrol. Men at bebrejde din kodefejl i miljøspørgsmål er ikke en løsning. Du har brug for en robust programmering, der tager sig af ekstraordinære situationer. En sådan kode er kendt som Exception Handler.
I vores eksempel vil god undtagelseshåndtering være, når serveren er nede, oprette forbindelse til backup-serveren.
For at implementere dette skal du indtaste din kode for at oprette forbindelse til serveren (Brug traditionelle hvis og ellers betingelser).
Du vil kontrollere, om serveren er nede. Hvis ja, skriv koden for at oprette forbindelse til backup-serveren.
En sådan organisering af kode ved hjælp af "if" og "else" loop er ikke effektiv, når din kode har flere java-undtagelser at håndtere.
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
Prøv Catch Block
Java giver en indbygget ekstraordinær håndtering.
- Den normale kode går ind i en TRY- blok.
- Undtagelseshåndteringskoden går ind i CATCH- blokken
I vores eksempel vil TRY-blok indeholde koden, der skal oprettes forbindelse til serveren. CATCH-blokken indeholder koden, der skal oprettes forbindelse til backup-serveren.
Hvis serveren er oppe, ignoreres koden i CATCH-blokken. Hvis serveren er nede, hæves en undtagelse, og koden i fangstblok udføres.
Så dette håndteres undtagelsen i Java.
Syntaks til brug af prøve og fangst
try{statement(s)}catch (exceptiontype name){statement(s)}
Eksempel
Trin 1) Kopier følgende kode til en editor
class JavaException {public static void main(String args[]){int d = 0;int n = 20;int fraction = n/d;System.out.println("End Of Main");}}
Trin 2) Gem filen og kompilér koden. Kør programmet ved hjælp af kommandoen Java JavaException
Trin 3) En aritmetisk undtagelse - divider med nul vises som nedenfor for linje # 5, og linje # 6 udføres aldrig
Trin 4) Lad os nu undersøge, hvordan forsøg og fangst vil hjælpe os med at håndtere denne undtagelse. Vi vil sætte undtagelsen forårsager linje kode ind i en try -blok, efterfulgt af en fangst blok. Kopier følgende kode til editoren.
class JavaException {public static void main(String args[]) {int d = 0;int n = 20;try {int fraction = n / d;System.out.println("This line will not be Executed");} catch (ArithmeticException e) {System.out.println("In the catch Block due to Exception = " + e);}System.out.println("End Of Main");}}
Trin 5) Gem, kompilér og kør koden. Du får følgende output
Som du bemærker, håndteres undtagelsen, og den sidste kode kode udføres også. Bemærk også, at linje # 7 ikke vil blive udført, fordi så snart en undtagelse er hævet, springer kontrolstrømmen til fangstblokken.
Bemærk: AritmeticException-objektet "e" indeholder oplysninger om den undtagelse, der er opstået, og som kan være nyttige til at udføre gendannelseshandlinger.
Java-undtagelsesklasser Hierarki
Når en fangstopgørelse er udført, omgås de andre, og udførelsen fortsætter efter forsøg / fangstblokken. De indlejrede fangstblokke følger undtagelseshierarkiet.- Alle undtagelsesklasser i Java udvider klassen 'Kan kastes'. Throwable har to underklasser, Fejl og Undtagelse
- Fejlklassen definerer undtagelsen eller de problemer, der ikke forventes at opstå under normale omstændigheder af vores program, f.eks. Hukommelsesfejl, hardwarefejl, JVM-fejl osv.
- Undtagelsesklassen repræsenterer de undtagelser, der kan håndteres af vores program, og vores program kan gendannes fra denne undtagelse ved hjælp af prøve-fangst-blok
- En Runtime-undtagelse er en underklasse af undtagelsesklassen. Undtagelsen af denne type repræsenterer en undtagelse, der forekommer på kørselstiden, og som ikke kan spores på kompileringstidspunktet. Et glimrende eksempel på det samme er at dele med nul undtagelse eller nul pointer undtagelse osv
- IO-undtagelse genereres under input og output-operationer
- Afbrudte undtagelser i Java genereres under multiple threading.
Trin 1) Kopier følgende kode til en editor.
class JavaException {public static void main(String args[]) {try {int d = 1;int n = 20;int fraction = n / d;int g[] = {1};g[20] = 100;}/*catch(Exception e){System.out.println("In the catch block due to Exception = "+e);}*/catch (ArithmeticException e) {System.out.println("In the catch block due to Exception = " + e);} catch (ArrayIndexOutOfBoundsException e) {System.out.println("In the catch block due to Exception = " + e);}System.out.println("End Of Main");}}
Trin 2) Gem filen og kompilér koden. Kør programmet ved hjælp af kommandoen Java JavaException .
Trin 3) Der genereres en ArrayIndexOutOfBoundsException. Skift værdien af int d til 0. Gem, kompilér og kør koden.
Trin 4 ) Der skal genereres en aritmetisk undtagelse.
Trin 5) Kommentarlinje nr. 10 til linje 12. Gem, kompilér og kør koden.
Trin 6) Kompileringsfejl? Dette skyldes, at undtagelse er basisklassen for aritmetisk undtagelse. Enhver undtagelse, der hæves af ArithmeticException, kan også håndteres af Exception-klassen, så fangstblokken for ArithmeticException får aldrig en chance for at blive udført, hvilket gør den overflødig. Derfor kompileringsfejlen.
Java Endelig Bloker
Den endelige blok udføres uanset en undtagelse, der hæves i prøveblokken. Det er valgfrit at bruge med en prøveblok.
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
Hvis en undtagelse hæves i prøveblokken, endelig udføres blok, efter fangstblokken er udført.
Eksempel
Trin 1) Kopier følgende kode til en editor.
class JavaException {public static void main(String args[]){try{int d = 0;int n =20;int fraction = n/d;}catch(ArithmeticException e){System.out.println("In the catch block due to Exception = "+e);}finally{System.out.println("Inside the finally block");}}}
Trin 2) Gem, kompilér og kør koden.
Trin 3) Forventet output. Endelig udføres blok, selvom en undtagelse hæves.
Trin 4) Skift værdien af variablen d = 1. Gem, kompilér og kør koden, og observer output.
Resume :
- En undtagelse er en kørselsfejl, der afbryder den normale strøm af programudførelsen. Afbrydelse under udførelsen af programmet betegnes som fejl eller undtagelse.
- Fejl inddeles i to kategorier
- Kompilér tidsfejl - Syntaksfejl, semantiske fejl
- Kørselsfejl - undtagelse
- Et robust program skal håndtere alle undtagelser og fortsætte med sin normale strøm af programudførelse. Java giver en indbygget ekstraordinær håndteringsmetode
- Exception Handler er et sæt kode, der håndterer en undtagelse . Undtagelser kan håndteres i Java ved hjælp af prøve og fangst.
- Prøv at blokere : Normal kode fortsætter med denne blok.
- Fangstblok : Hvis der er fejl i normal kode, går den ind i denne blok