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.

  • ⚠️ Unntak definert: Et unntak er en kjøretidshendelse som avbryter standard utførelsessekvens og er representert som et objekt som beskriver feiltilstanden.
  • 🧯 Prøv Catch Block: Pakk risikabel kode inn i en try-blokk og følg den med én eller flere catch-blokker for å fange opp spesifikke unntakstyper på en elegant måte.
  • 🔁 Til slutt oppførsel: `finally`-blokken kjøres alltid etter `try and catch`, noe som gjør den ideell for å lukke filer, sockets eller frigjøre andre systemressurser.
  • Unntakshierarki: Alle unntak arver fra Throwable, som forgrener seg til Error og Exception, med RuntimeException som dekker ukontrollerte tilfeller som dividering med null.
  • 🧪 Beste praksis: Fang opp det mest spesifikke unntaket først, unngå tomme catch-blokker, logg meningsfulle meldinger og bruk multi-catch for å holde koden konsis og vedlikeholdbar.

Unntakshåndtering inn Java

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:

  1. Kompiler tidsfeil
  2. 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.

Java Avvikshåndtering

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.

Java Avvikshåndtering

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.

Java Avvikshåndtering

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.

  1. Den vanlige koden går inn i en PRØV blokkere.
  2. Unntakshåndteringskoden går inn i CATCH blokkere.

Prøv Catch Block

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.

Prøv Catch Block

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.

Prøv Catch Block

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.

Java Unntakshierarki

  • 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.

Spørsmål og svar

Avkryssede unntak verifiseres ved kompileringstid og må deklareres eller fanges opp, for eksempel IOException. Uavkryssede unntak utvider RuntimeException, oppstår ved kjøretid og krever ikke obligatorisk håndtering, for eksempel NullPointerException eller ArithmeticException.

Finally-blokken kjører alltid etter try-and-catch-blokkene, enten det oppstod et unntak eller ikke. Det er det tryggeste stedet å frigjøre ressurser som filhåndtak, databasetilkoblinger eller sockets, noe som sikrer ren avslutning av operasjoner.

Nøkkelordet `throw` brukes i en metode for å faktisk generere et unntaksobjekt, mens `throws` brukes i en metodesignatur for å erklære at metoden kan sende visse kontrollerte unntak til den som kaller den for håndtering.

Ja. En try-blokk kan etterfølges av en finally-blokk uten noen catch-blokk. Dette mønsteret brukes når utvikleren vil sikre at oppryddingskoden kjøres selv om selve unntaket overføres til den som kaller den.

Ja. AI-drevne observasjonsverktøy analyserer stakken traces, logger og kodestier for å forutsi hvor kjøretidsunntak sannsynligvis vil forekomme. De foreslår defensive kontroller, anbefaler plassering av fangst og overflateavvik, helping team forhindrer krasj før de når produksjon.

AI-assistenter analyserer stabelen traces, korrelerer dem med kildekoden og foreslår sannsynlige rotårsaker pluss rettelser. De genererer try catch-maler, anbefaler loggingforbedringer og omskriver til og med feilaktige metoder, noe som dramatisk reduserer tiden utviklerne bruker på å diagnostisere. Java unntak.

Oppsummer dette innlegget med: