Unntakshåndtering inn Java
⚡ Smart oppsummering
Java Unntakshåndtering gir en strukturert mekanisme for å håndtere kjøretidsfeil som forstyrrer normal programflyt. Den bruker nøkkelordene try, catch, finally, throw og throws for å oppdage, isolere og gjenopprette fra eksepsjonelle forhold samtidig som den holderping applikasjoner er robuste og forutsigbare.

Hva er et unntak i Java?
An Unntak i Java er en hendelse som avbryter utførelsen av programinstruksjoner og forstyrrer den normale flyten av programutførelsen. Det er et objekt som pakker inn en feilhendelsesinformasjon som oppstod i en metode, og den sendes til kjøretidssystemet. Java, unntak brukes hovedsakelig til å signalisere ulike typer feiltilstander slik at utviklere kan reagere på dem på en kontrollert måte.
Det finnes to hovedkategorier av feil i Java:
- Kompiler tidsfeil
- Kjøretidsfeil
Kompileringstidsfeil kan klassifiseres i to ytterligere typer:
- Syntaksfeil
- Semantiske feil
Syntaksfeil Eksempel:
I stedet for å erklære int a; du feilaktig erklærte det som in a;, som kompilatoren vil gi en feil for.
Eksempel på semantiske feil: Du har deklarert en variabel int a; og etter noen linjer med kode erklærer du igjen et heltall som int a;. Alle disse feilene er uthevet når du kompilerer koden.
Eksempel på kjøretidsfeil
En kjøretidsfeil kalles en UnntakDet er enhver hendelse som avbryter den normale flyten av programkjøring. Eksempler på unntak inkluderer aritmetisk unntak, NullPointerException, divider med null-unntak og mange flere. Unntak i Java er forhold som ofte er utenfor en utviklers direkte kontroll.
Klikk her. hvis videoen ikke er tilgjengelig
Hvorfor trenger vi unntakshåndtering?
Anta at du har kodet et program for å få tilgang til en server. Ting fungerer fint mens du utviklerping koden i et lokalt miljø med kontrollerte forhold.
Under en faktisk produksjonskjøring kan serveren være nede. Når programmet ditt prøver å få tilgang til den, oppstår et unntak, og uten riktig håndtering vil programmet avsluttes brått.
Slik håndterer du et unntak i Java
Så langt har vi sett at et unntak ofte er utenfor en utviklers kontroll. Å skylde på miljøproblemer i kodefeil er imidlertid ikke en reell løsning. Du trenger robust programmering som tar seg av eksepsjonelle situasjoner. Slik kode er kjent som en Unntakshåndterer.
I vårt eksempel vil god unntakshåndtering bety at når primærserveren er nede, kobler programmet seg automatisk til en backupserver.
For å implementere dette kan du skrive kode for å koble til serveren ved hjelp av tradisjonelle «if»- og «else»-betingelser. Du vil sjekke om serveren er nede, og hvis ja, vil du skrive kode for å koble til backup-serveren. Slik organisering av kode ved hjelp av «if»- og «else»-grener 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
Java tilbyr en innebygd mekanisme for håndtering av unntak som skiller normal logikk fra logikk for feilgjenoppretting.
- Den vanlige koden går inn i en PRØV blokkere.
- Unntakshåndteringskoden går inn i CATCH blokkere.
I vårt eksempel vil TRY-blokken inneholde koden for å koble til serveren. CATCH-blokken vil inneholde koden for å koble til backup-serveren. Hvis serveren er oppe, vil koden i CATCH-blokken bli ignorert. Hvis serveren er nede, genereres et unntak, og koden i catch-blokken vil bli utført.
Så, slik håndteres et unntak i Java.
Syntaks for bruk av try og catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Eksempel på Try Catch-blokk
Trinn 1) Kopier følgende kode inn i 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 med kommandoen java. JavaUnntak.
Trinn 3) Et aritmetisk unntak, dividert med null, vises for linje 5, og linje 6 utføres aldri.
Trinn 4) La oss nå undersøke hvordan try and catch vil hjelpe oss med å håndtere dette unntaket. Vi legger kodelinjen som forårsaker unntaket inn i en prøve blokk, etterfulgt av en å fange blokkere. Kopier følgende kode inn i 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"); } }
Trinn 5) Lagre, kompiler og kjør koden. Du vil få følgende utdata.
Som du ser, håndteres unntaket, og den siste kodelinjen kjøres også. Merk også at linje 7 ikke kjøres fordi så snart et unntak er hevet, hopper kontrollstrømmen til fangblokken.
OBS: ArithmeticException-objektet «e» inneholder informasjon om unntaket som har oppstått, noe som kan være nyttig når man skal iverksette gjenopprettingstiltak.
Java Unntaksklassehierarki
Etter at én catch-setning er utført, blir de andre omgått, og utførelsen fortsetter etter try-and-catch-blokken. Nestede catch-blokker må følge unntakshierarkiet fra den mest spesifikke underklassen til den mest generelle foreldreklassen.
- Alle unntaksklasser i Java utvide klassen Throwable. Throwable har to underklasser, Error og Exception.
- Error-klassen definerer unntakene eller problemene som ikke forventes å oppstå under normale omstendigheter i programmet ditt, for eksempel minnefeil, maskinvarefeil eller JVM-feil.
- Exception-klassen representerer unntakene som kan håndteres av programmet ditt, og programmet ditt kan gjenopprette fra disse unntakene ved hjelp av try-and-catch-blokker.
- En RuntimeException er en underklasse av Exception-klassen. Unntak av denne typen representerer ukontrollerte unntak som oppstår under kjøretid og ikke kan oppdages under kompilering. Gode eksempler inkluderer divider-med-null-unntak og nullpeker-unntak.
- IOException genereres under input- og output-operasjoner.
- AvbruttUnntak i Java genereres under flertrådede operasjoner når en tråd avbrytes.
Eksempel: Nesting av try and catch-blokker
Trinn 1) Kopier følgende kode inn i 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"); } }
Trinn 2) Lagre filen og kompiler koden. Kjør programmet med kommandoen, Java JavaUnntak.
Trinn 3) En ArrayIndexOutOfBoundsException genereres. Endre verdien av int d til 0. Lagre, kompiler og kjør koden.
Trinn 4) Et aritmetisk unntak må genereres.
Trinn 5) Fjern kommentaren fra linje 10 til linje 12. Lagre, kompiler og kjør koden.
Trinn 6) Kompileringsfeil? Dette er fordi Exception er basisklassen til ArithmeticException. Ethvert unntak som genereres av ArithmeticException kan også håndteres av Exception-klassen. Så catch-blokken til ArithmeticException vil aldri få en sjanse til å kjøres, noe som gjør den overflødig. Derav kompileringsfeilen.
Java Endelig blokkere
Den endelige blokken er utføres uavhengig av at et unntak blir reist i prøveblokken. Det er det valgfritt å bruke med en try-blokk. Finally-blokken er det rette stedet å frigjøre ressurser som databasetilkoblinger, filer eller nettverkssockets.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Hvis et unntak oppstår i try-blokken, utføres finally-blokken etter at catch-blokken er fullført.
Eksempel på endelig blokkering
Trinn 1) Kopier følgende kode inn i 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"); } } }
Trinn 2) Lagre, kompiler og kjør koden.
Trinn 3) Forventet utdata: Finally-blokken utføres selv om et unntak oppstår.
Trinn 4) Endre verdien til variabelen d = 1. Lagre, kompiler og kjør koden, og observer resultatet.
Beste praksis for Java Avvikshåndtering
Å følge noen velprøvde regler vil hjelpe deg med å opprettholde Java koderobust, lesbar og enkel å feilsøke:
- Fang opp det mest spesifikke unntaket først, deretter de mer generelle, for å bevare integriteten til unntakshierarkiet.
- Unngå tomme catch-blokker. Logg som et minimum unntaket slik at rotårsaken aldri går tapt.
- Bruk finally-blokken eller prøv med ressurser for å frigjøre filer, sokkeler og databasetilkoblinger.
- Kast bare kontrollerte unntak når innringeren kan gjenopprette feil på en rimelig måte, og bruk ukontrollerte unntak for programmeringsfeil.
- Pakk inn lavnivåunntak i et meningsfullt forretningsunntak for å holde API-en i ordentracts rent.
- Aldri svelg InterruptedException stille i flertrådet kode, gjenopprett avbruddsflagget i stedet.







