Hva er unntak i Java?
Unntak i Java er en hendelse som avbryter utførelsen av programinstruksjoner og forstyrrer den normale strømmen av programgjennomføring. Det er et objekt som bryter inn en feilhendelsesinformasjon som skjedde i en metode, og den sendes til kjøretidssystemet. I Java brukes unntak hovedsakelig for å indikere forskjellige typer feiltilstander.
I denne veiledningen vil du lære-
- Hva er unntak?
- Hvorfor trenger vi unntak?
- Hvordan håndtere unntak
- Prøv Catch Block
- Java Unntaksklasse Hierarki
- Java Endelig blokk
Det er to typer feil:
- Kompiler tidsfeil
- Runtime feil
Kompileringstidsfeil kan igjen klassifiseres i to typer:
- Syntaksfeil
- Semantiske feil
Syntaksfeil Eksempel:
I stedet for å erklære
int a;
du erklærte det feilaktig in a;
for hvilken kompilator som vil kaste feil.
Eksempel: Du har erklært en variabel
int a;
og etter noen kodelinjer erklærer du igjen et heltall som int a;
. Alle disse feilene blir uthevet når du kompilerer koden.
Eksempel på kjøretidsfeil
En kjøretidsfeil kalles en unntaksfeil . Det er enhver hendelse som forstyrrer den normale strømmen av programutførelsen.
Eksempel på unntak er, aritmetisk unntak, Nullpointer unntak, Divisjon med null unntak, etc.
Unntak i Java er noe som er utenfor utviklerens kontroll.
Klikk her hvis videoen ikke er tilgjengelig
Hvorfor trenger vi unntak?
Anta at du har kodet et program for å få tilgang til serveren. Ting fungerte bra mens du utviklet koden.
Under den faktiske produksjonen er serveren nede. Når programmet ditt prøvde å få tilgang til det, heves et unntak.
Hvordan håndtere unntak
Så langt vi har sett, er unntak utenfor utviklerens kontroll. Men å skylde på kodesvikt i miljøspørsmål er ikke en løsning. Du trenger en robust programmering, som tar vare på eksepsjonelle situasjoner. En slik kode er kjent som Exception Handler.
I vårt eksempel vil god unntakshåndtering være, når serveren er nede, koble til backup-serveren.
For å implementere dette, skriv inn koden din for å koble til serveren (bruker tradisjonelle hvis og annet forhold).
Du vil sjekke om serveren er nede. Hvis ja, skriv koden for å koble til backup-serveren.
Slik organisering av kode, ved hjelp av "if" og "else" loop, er ikke effektiv når koden din har flere Java-unntak å håndtere.
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
Prøv Catch Block
Java gir en innebygd eksepsjonell håndtering.
- Den normale koden går inn i en TRY- blokk.
- Unntakshåndteringskoden går inn i CATCH- blokken
I vårt eksempel vil TRY-blokkeringen inneholde koden for å koble til serveren. CATCH-blokken inneholder koden for å koble til sikkerhetskopiserveren.
Hvis serveren er oppe, blir koden i CATCH-blokken ignorert. I tilfelle serveren er nede, heves et unntak, og koden i fangstblokken blir utført.
Så dette håndteres unntaket i Java.
Syntaks for bruk av prøv og fangst
try{statement(s)}catch (exceptiontype name){statement(s)}
Eksempel
Trinn 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");}}
Trinn 2) Lagre filen og kompiler koden. Kjør programmet ved hjelp av kommando, Java JavaException
Trinn 3) Et aritmetisk unntak - divider med null vises som nedenfor for linje 5 og linje 6 blir aldri utført
Trinn 4) La oss nå undersøke hvordan prøvefangst vil hjelpe oss å håndtere dette unntaket. Vi vil sette unntak forårsaker linje med kode i et forsøk blokk, etterfulgt av en fangst blokk. Kopier følgende kode til redigeringsprogrammet.
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");}}
Trinn 5) Lagre, kompilere og kjøre koden. Du får følgende utdata
Som du ser, blir unntaket håndtert, og den siste kodelinjen blir også utført. Vær også oppmerksom på at linje nr. 7 ikke vil bli utført, for så snart et unntak heves, hopper kontrollflyten til fangstblokken.
Merk: AritmeticException-objektet "e" inneholder informasjon om unntaket som har oppstått, og som kan være nyttig for å ta gjenopprettingshandlinger.
Java Unntaksklasse Hierarki
Etter at en fangstuttalelse er utført, blir de andre forbigått, og kjøringen fortsetter etter prøve / fangstblokken. De nestede fangstblokkene følger unntakshierarkiet.- Alle unntaksklasser i Java utvider klassen 'Kastbar'. Throwable har to underklasser, Feil og Unntak
- Feilklassen definerer unntaket eller problemene som ikke forventes å oppstå under normale omstendigheter av vårt program, f.eks. Minnefeil, maskinvarefeil, JVM-feil osv.
- Unntaksklassen representerer unntakene som kan håndteres av programmet vårt, og programmet vårt kan gjenopprettes fra dette unntaket ved hjelp av prøve og fangst-blokk
- Et Runtime-unntak er en underklasse av unntaksklassen. Unntaket av denne typen representerer unntak som oppstår på kjøretiden og som ikke kan spores på kompileringstidspunktet. Et utmerket eksempel på det samme er å dele med null unntak, eller nullpeker unntak, osv
- IO-unntak genereres under inngangs- og utgangsoperasjoner
- Avbrutte unntak i Java, genereres under flere tråder.
Trinn 1) Kopier følgende kode til en redaktør.
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");}}
Trinn 2) Lagre filen og kompiler koden. Kjør programmet ved hjelp av kommando, Java JavaException .
Trinn 3) Et ArrayIndexOutOfBoundsException genereres. Endre verdien på int d til 0. Lagre, kompiler og kjør koden.
Trinn 4 ) Et aritmetisk unntak må genereres.
Trinn 5) Kommentarlinje nr. 10 til linje nr. 12. Lagre, kompiler og kjør koden.
Trinn 6) Kompileringsfeil? Dette er fordi Unntak er basisklassen til AritmetikkUttak unntak. Ethvert unntak som heves av ArithmeticException kan også håndteres av Exception-klassen, så fangstblokken til ArithmeticException vil aldri få en sjanse til å bli utført, noe som gjør det overflødig. Derav kompileringsfeilen.
Java Endelig blokk
Den endelige blokken utføres uavhengig av at et unntak heves i prøveblokken. Det er valgfritt å bruke med en prøveblokk.
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
I tilfelle et unntak heves i prøveblokken, til slutt blir blokken utført etter at fangstblokken er utført.
Eksempel
Trinn 1) Kopier følgende kode til en redaktør.
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");}}}
Trinn 2) Lagre, kompiler og kjør koden.
Trinn 3) Forventet utgang. Endelig utføres blokk selv om et unntak heves.
Trinn 4) Endre verdien av variabelen d = 1. Lagre, kompilere og kjør koden og følg utdataene.
Sammendrag :
- Et unntak er en kjøretidsfeil som avbryter normal gjennomføring av program. Forstyrrelse under gjennomføring av programmet blir referert til som feil eller unntak.
- Feil er klassifisert i to kategorier
- Kompilere tidsfeil - Syntaksfeil, semantiske feil
- Runtime-feil - unntak
- Et robust program skal håndtere alle unntak og fortsette med sin normale strøm av programutførelse. Java gir en innebygd eksepsjonell håndteringsmetode
- Exception Handler er et sett med kode som håndterer et unntak . Unntak kan håndteres i Java ved hjelp av prøve og fangst.
- Prøv å blokkere : Normal kode går på denne blokken.
- Fangsblokk : Hvis det er feil i normal kode, vil den gå inn i denne blokken