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.

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:
- Kompilera tidsfel
- 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.
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.
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.
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.
- Den normala koden gรฅr in i a PROVA blockera.
- Undantagshanteringskoden gรฅr in i Fร NGA blockera.
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.
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.
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.
- 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.







