Undantagshantering in Java

โšก Smart sammanfattning

Java Exception Handling tillhandahรฅller en strukturerad mekanism fรถr att hantera kรถrtidsfel som stรถr det normala programflรถdet. Den anvรคnder nyckelorden try, catch, finally, throw och throws fรถr att upptรคcka, isolera och รฅterstรคlla frรฅn exceptionella fรถrhรฅllanden samtidigt som den hรฅller ...ping applikationer robusta och fรถrutsรคgbara.

  • โš ๏ธ Undantag definierat: Ett undantag รคr en kรถrtidshรคndelse som avbryter standardkรถrningssekvensen och representeras som ett objekt som beskriver feltillstรฅndet.
  • ๐Ÿงฏ Testa Catch Block: Linda in riskabel kod i ett try-block och fรถlj det med ett eller flera catch-block fรถr att fรฅnga specifika undantagstyper pรฅ ett elegant sรคtt.
  • ๐Ÿ” Slutligen beteende: Blocket `finally` kรถrs alltid efter `try and catch`, vilket gรถr det idealiskt fรถr att stรคnga filer, sockets eller frigรถra andra systemresurser.
  • โœ… Undantagshierarki: Alla undantag รคrver frรฅn Throwable, som fรถrgrenar sig till Error och Exception, dรคr RuntimeException tรคcker okontrollerade fall som att dividera med noll.
  • ๐Ÿงช Bรคsta metoder: Fรฅnga det mest specifika undantaget fรถrst, undvik tomma catch-block, logga meningsfulla meddelanden och anvรคnd multi-catch fรถr att hรฅlla koden koncis och lรคttskรถtt.

Undantagshantering in Java

Vad รคr ett undantag i Java?

An Undantag i Java รคr en hรคndelse som avbryter exekveringen av programinstruktioner och stรถr det normala flรถdet av programexekveringen. Det รคr ett objekt som omsluter en felhรคndelseinformation som intrรคffat i en metod, och den skickas till kรถrtidssystemet. Java, undantag anvรคnds huvudsakligen fรถr att signalera olika typer av feltillstรฅnd sรฅ att utvecklare kan reagera pรฅ dem pรฅ ett kontrollerat sรคtt.

Det finns tvรฅ breda kategorier av fel i Java:

  1. Kompilera tidsfel
  2. Kรถrtidsfel

Kompileringstidsfel kan klassificeras i ytterligare tvรฅ typer:

  • Syntaxfel
  • Semantiska fel

Syntaxfel Exempel:

Istรคllet fรถr att deklarera int a; du deklarerade det av misstag som in a;, fรถr vilket kompilatorn kommer att ge ett fel.

Exempel pรฅ semantiska fel: Du har deklarerat en variabel int a; och efter nรฅgra rader kod deklarerar du igen ett heltal som int a;. Alla dessa fel markeras nรคr du kompilerar koden.

Runtime Errors Exempel

Ett kรถrtidsfel kallas fรถr ett undantagDet รคr varje hรคndelse som avbryter det normala flรถdet av programkรถrning. Exempel pรฅ undantag inkluderar aritmetiskt undantag, NullPointerException, dividera med noll-undantag och mรฅnga fler. Undantag i Java รคr fรถrhรฅllanden som ofta ligger utanfรถr en utvecklares direkta kontroll.

Klicka hรคr. om videon inte รคr tillgรคnglig

Varfรถr behรถver vi undantagshantering?

Anta att du har kodat ett program fรถr att komma รฅt en server. Allt fungerar bra medan du utvecklarping koden i en lokal miljรถ med kontrollerade fรถrhรฅllanden.

Java Undantagshantering

Under en faktisk produktionskรถrning kan servern vara nere. Nรคr ditt program fรถrsรถker komma รฅt den uppstรฅr ett undantag, och utan korrekt hantering avslutas programmet plรถtsligt.

Java Undantagshantering

Hur man hanterar ett undantag i Java

Hittills har vi sett att ett undantag ofta ligger utanfรถr en utvecklares kontroll. Att skylla kodfel pรฅ miljรถproblem รคr dock inte en riktig lรถsning. Du behรถver robust programmering som tar hand om exceptionella situationer. Sรฅdan kod รคr kรคnd som en Undantagshanterare.

I vรฅrt exempel skulle god undantagshantering innebรคra att nรคr den primรคra servern รคr nere ansluter programmet automatiskt till en reservserver.

Java Undantagshantering

Fรถr att implementera detta kan du skriva kod fรถr att ansluta till servern med traditionella if- och else-villkor. Du kommer att kontrollera om servern รคr nere, och om ja, kommer du att skriva kod fรถr att ansluta till backupservern. Sรฅdan organisation av kod med hjรคlp av "if"- och "else"-grenar รคr inte effektiv nรคr din kod har flera Java undantag att hantera.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Testa Catch Block Java

Java tillhandahรฅller en inbyggd mekanism fรถr undantagshantering som separerar normal logik frรฅn logik fรถr felรฅterstรคllning.

  1. Den normala koden gรฅr in i a PROVA blockera.
  2. Undantagshanteringskoden gรฅr in i Fร…NGA blockera.

Prova Catch Block

I vรฅrt exempel innehรฅller TRY-blocket koden fรถr att ansluta till servern. CATCH-blocket innehรฅller koden fรถr att ansluta till backupservern. Om servern รคr uppe kommer koden i CATCH-blocket att ignoreras. Om servern รคr nere genereras ett undantag och koden i catch-blocket kommer att exekveras.

Prova Catch Block

Sรฅ hรคr hanteras ett undantag Java.

Syntax fรถr att anvรคnda try och catch

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Exempel pรฅ Try Catch-block

Steg 1) Kopiera fรถljande kod till 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");
   }
}

Steg 2) Spara filen och kompilera koden. Kรถr programmet med kommandot java. JavaUndantag.

Steg 3) Ett aritmetiskt undantag, dividerat med noll, visas fรถr rad 5, och rad 6 kรถrs aldrig.

Steg 4) Lรฅt oss nu undersรถka hur try and catch hjรคlper oss att hantera detta undantag. Vi kommer att lรคgga in den undantagsorsakande kodraden i en prova block, fรถljt av en fรฅngst blockera. Kopiera fรถljande kod till editorn.

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");
 }
}

Steg 5) Spara, kompilera och kรถr koden. Du fรฅr fรถljande utdata.

Prova Catch Block

Som du ser hanteras undantaget, och den sista kodraden kรถrs ocksรฅ. Observera ocksรฅ att rad 7 inte kommer att kรถras eftersom sรฅ snart ett undantag hรถjs, hoppar kontrollflรถdet till fรฅngstblocket.

Obs: ArithmeticException-objektet "e" innehรฅller information om det intrรคffade undantaget, vilket kan vara anvรคndbart nรคr man vidtar รฅterstรคllningsรฅtgรคrder.

Java Undantagsklasshierarki

Efter att en catch-sats har kรถrts, kringgรฅs de andra, och kรถrningen fortsรคtter efter try- och catch-blocket. Kapslade catch-block mรฅste fรถlja undantagshierarkin frรฅn den mest specifika underklassen till den mest generella fรถrรคlderklassen.

Java Undantagshierarki

  • Alla undantagsklasser i Java utรถka klassen Throwable. Throwable har tvรฅ underklasser, Error och Exception.
  • Klassen Error definierar de undantag eller problem som inte fรถrvรคntas uppstรฅ under normala omstรคndigheter i ditt program, till exempel minnesfel, hรฅrdvarufel eller JVM-fel.
  • Exception-klassen representerar de undantag som kan hanteras av ditt program, och ditt program kan รฅterstรคlla frรฅn dessa undantag med hjรคlp av try- och catch-block.
  • En RuntimeException รคr en underklass till Exception-klassen. Undantag av denna typ representerar okontrollerade undantag som intrรคffar vid kรถrning och inte kan detekteras vid kompileringstid. Bra exempel inkluderar dividera med noll-undantag och nullpekarundantag.
  • IOException genereras under in- och utdataoperationer.
  • Avbrutet undantag i Java genereras under flertrรฅdade operationer nรคr en trรฅd avbryts.

Exempel: Kapsling av try and catch-block

Steg 1) Kopiera fรถljande kod till 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");
 }
}

Steg 2) Spara filen och kompilera koden. Kรถr programmet med kommandot, Java Javaundantag.

Steg 3) Ett ArrayIndexOutOfBoundsException genereras. ร„ndra vรคrdet pรฅ int d till 0. Spara, kompilera och kรถr koden.

Steg 4) Ett ArithmeticException mรฅste genereras.

Steg 5) Avkommentera rad 10 till rad 12. Spara, kompilera och kรถr koden.

Steg 6) Kompileringsfel? Detta beror pรฅ att Exception รคr basklassen fรถr ArithmeticException. Alla undantag som genereras av ArithmeticException kan ocksรฅ hanteras av Exception-klassen. Sรฅ catch-blocket i ArithmeticException kommer aldrig att fรฅ en chans att kรถras, vilket gรถr det redundant. Dรคrav kompileringsfelet.

Java ร„ntligen blockera

Det sista blocket รคr verkstรคlls oavsett om ett undantag gรถrs i fรถrsรถksblocket. Det รคr valfritt att anvรคnda med ett try-block. Finally-blocket รคr rรคtt plats att frigรถra resurser som databasanslutningar, filer eller nรคtverkssockets.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Om ett undantag uppstรฅr i try-blocket exekveras finally-blocket efter att catch-blocket har slutfรถrts.

Exempel pรฅ slutligen Block

Steg 1) Kopiera fรถljande kod till 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");
  }
}
}

Steg 2) Spara, kompilera och kรถr koden.

Steg 3) Fรถrvรคntad utdata: Blocket `finally` kรถrs trots att ett undantag har uppstรฅtt.

Steg 4) ร„ndra vรคrdet pรฅ variabeln d = 1. Spara, kompilera och kรถr koden och observera utdata.

Bรคsta metoder fรถr Java Undantagshantering

Att fรถlja nรฅgra beprรถvade regler hjรคlper dig att behรฅlla din Java kodbestรคndig, lรคsbar och lรคtt att felsรถka:

  • Fรฅnga det mest specifika undantaget fรถrst, sedan de mer allmรคnna, fรถr att bevara integriteten i undantagshierarkin.
  • Undvik tomma catch-block. Logga รฅtminstone undantaget sรฅ att grundorsaken aldrig gรฅr fรถrlorad.
  • Anvรคnd blocket `finally` eller fรถrsรถk med resurser fรถr att frigรถra filer, sockets och databasanslutningar.
  • Kasta endast kontrollerade undantag nรคr anroparen rimligen kan รฅterstรคlla, och anvรคnd okontrollerade undantag fรถr programmeringsfel.
  • Slรฅ in lรฅgnivรฅundantag i ett meningsfullt affรคrsundantag fรถr att hรฅlla API-konformiteten uppetracts rent.
  • Svรคlj aldrig InterruptedException tyst i flertrรฅdad kod, รฅterstรคll avbrottsflaggan istรคllet.

Vanliga frรฅgor

Kontrollerade undantag verifieras vid kompileringstid och mรฅste deklareras eller fรฅngas, sรฅsom IOException. Okontrollerade undantag utรถkar RuntimeException, intrรคffar vid kรถrning och krรคver inte obligatorisk hantering, sรฅsom NullPointerException eller ArithmeticException.

Blocket `finally` kรถrs alltid efter `try and catch`-blocken, oavsett om ett undantag intrรคffade eller inte. Det รคr den sรคkraste platsen att frigรถra resurser som filreferenser, databasanslutningar eller sockets, vilket sรคkerstรคller en felfri avslutning av operationer.

Nyckelordet throw anvรคnds inuti en metod fรถr att faktiskt generera ett undantagsobjekt, medan throws anvรคnds i en metodsignatur fรถr att deklarera att metoden fรฅr skicka vissa kontrollerade undantag till sin anropare fรถr hantering.

Ja. Ett try-block kan fรถljas av ett finally-block utan nรฅgot catch-block. Detta mรถnster anvรคnds nรคr utvecklaren vill sรคkerstรคlla att rensningskod kรถrs รคven om sjรคlva undantaget sprids till anroparen.

Ja. AI-drivna observerbarhetsverktyg analyserar stacken traces, loggar och kodsรถkvรคgar fรถr att fรถrutsรคga var runtime-undantag sannolikt kommer att intrรคffa. De fรถreslรฅr defensiva kontroller, rekommenderar placering av fรฅngster och ytanomalier, helping team fรถrhindrar krascher innan de nรฅr produktion.

AI-assistenters parsningsstack traces, korrelera dem med kรคllkod och fรถreslรฅ troliga grundorsaker plus korrigeringar. De genererar try catch-mallar, rekommenderar loggfรถrbรคttringar och skriver till och med om felaktiga metoder, vilket dramatiskt minskar den tid utvecklarna lรคgger pรฅ att diagnostisera. Java undantag.

Sammanfatta detta inlรคgg med: