Vad är undantag i Java?
Undantag i Java är en händelse som avbryter körningen av programinstruktioner och stör det normala flödet av programkörningen. Det är ett objekt som slår in en felhändelseinformation som inträffade inom en metod och skickas till runtime-systemet. I Java används undantag främst för att indikera olika typer av felförhållanden.
I den här handledningen lär du dig-
- Vad är undantag?
- Varför behöver vi undantag?
- Hur man hanterar undantag
- Prova Catch Block
- Java-undantagsklass Hierarki
- Java slutligen blockera
Det finns två typer av fel:
- Kompilera tidsfel
- Runtime-fel
Kompileringstidsfel kan klassificeras igen i två typer:
- Syntaxfel
- Semantiska fel
Syntaxfel Exempel:
Istället för att förklara
int a;
du felaktigt förklarade det in a;
för vilken kompilator som kommer att kasta ett fel.
Exempel: Du har deklarerat en variabel
int a;
och efter några rader kod förklarar du igen ett heltal som int a;
. Alla dessa fel markeras när du kompilerar koden.
Exempel på körfel
Ett Runtime-fel kallas ett Exception- fel. Det är alla händelser som avbryter det normala flödet av programkörningen.
Exempel på undantag är, aritmetiskt undantag, Nullpointerundantag, Divider med nollundantag, etc.
Undantag i Java är något som är utanför utvecklarens kontroll.
Klicka här om videon inte är tillgänglig
Varför behöver vi undantag?
Antag att du har kodat ett program för att komma åt servern. Saker fungerade bra när du utvecklade koden.
Under den faktiska produktionskörningen är servern nere. När ditt program försökte komma åt det tas ett undantag upp.
Hur man hanterar undantag
Så långt vi har sett är undantag utanför utvecklarens kontroll. Men att skylla på ditt kodfel i miljöfrågor är ingen lösning. Du behöver en robust programmering som tar hand om exceptionella situationer. Sådan kod är känd som Exception Handler.
I vårt exempel skulle god undantagshantering vara, när servern är nere, ansluta till reservservern.
För att implementera detta, ange din kod för att ansluta till servern (använder traditionella om och annat villkor).
Du kommer att kontrollera om servern är nere. Om ja, skriv koden för att ansluta till reservservern.
Sådan organisering av kod, med "if" och "else" loop ä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}}
Prova Catch Block
Java ger en inbyggd exceptionell hantering.
- Den normala koden går in i ett TRY- block.
- Undantagshanteringskoden går in i CATCH- blocket
I vårt exempel kommer TRY-block att innehålla koden för att ansluta till servern. CATCH-blocket innehåller koden för att ansluta till reservservern.
Om servern är uppe ignoreras koden i CATCH-blocket. Om servern är nere höjs ett undantag och koden i fångstblocket körs.
Så här hanteras undantaget i Java.
Syntax för att använda try & catch
try{statement(s)}catch (exceptiontype name){statement(s)}
Exempel
Steg 1) Kopiera följande kod till en redigerare
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 JavaException
Steg 3) Ett aritmetiskt undantag - dividera med noll visas som nedan för rad # 5 och rad # 6 körs aldrig
Steg 4) Låt oss nu undersöka hur försök och fånga hjälper oss att hantera detta undantag. Vi kommer att sätta undantag orsakar kodraden i ett försök blocket, följt av en catch -block. Kopiera följande kod till redigeraren.
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öra koden. Du får följande utdata
Som du observerar hanteras undantaget och den sista kodraden körs också. Observera också att linje nr 7 inte kommer att köras eftersom så snart ett undantag höjs, hoppar kontrollflödet till fångsten.
Obs! AritmeticException-objektet "e" innehåller information om det undantag som har inträffat som kan vara användbart vid återställningsåtgärder.
Java-undantagsklass Hierarki
Efter att ett fångstmeddelande har utförts kringgår de andra och körningen fortsätter efter försöket / fångstblocket. De kapslade fångstblocken följer undantagshierarkin.- Alla undantagsklasser i Java utökar klassen "Throwable". Throwable har två underklasser, Fel och Undantag
- Felklassen definierar undantaget eller de problem som inte förväntas uppstå under normala omständigheter av vårt program, exempelvis minnesfel, maskinvarufel, JVM-fel, etc.
- Undantagsklassen representerar de undantag som kan hanteras av vårt program, och vårt program kan återställas från detta undantag med hjälp av försök och fångstblock
- Ett Runtime-undantag är en underklass av undantagsklassen. Undantaget av den här typen representerar undantag som inträffar vid körningstiden och som inte kan spåras vid kompileringstiden. Ett utmärkt exempel på detta är att dela med noll undantag eller nollpekare undantag, etc.
- IO-undantag genereras under in- och utmatningsoperationer
- Avbrutna undantag i Java genereras under flera trådar.
Steg 1) Kopiera följande kod till en redigerare.
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 JavaException .
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) Kommentarrad # 10 till rad # 12. Spara, kompilera och kör koden.
Steg 6) Kompileringsfel? Detta beror på att Exception är basklassen för ArithmeticException Exception. Alla undantag som tas upp av ArithmeticException kan också hanteras av Exception-klass. Så fångsten i ArithmeticException kommer aldrig att få en chans att utföras vilket gör det överflödigt. Därav kompileringsfelet.
Java slutligen blockera
Det slutliga blocket exekveras oavsett om ett undantag tas upp i försöksblocket. Det är valfritt att använda med ett försöksblock.
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
Om ett undantag tas upp i försöksblocket, slutligen utförs block efter att fångstblocket har exekverats.
Exempel
Steg 1) Kopiera följande kod till en redigerare.
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 produktion. Slutligen utförs block även om ett undantag tas upp.
Steg 4) Ändra värdet på variabeln d = 1. Spara, kompilera och köra koden och observera utdata.
Sammanfattning :
- Ett undantag är ett körtidsfel som avbryter det normala flödet av programkörning. Avbrott under körningen av programmet kallas fel eller undantag.
- Fel delas in i två kategorier
- Kompilera tidsfel - Syntaxfel, semantiska fel
- Runtime-fel - Undantag
- Ett robust program ska hantera alla undantag och fortsätta med sitt normala flöde av programkörning. Java erbjuder en inbyggd exceptionell hanteringsmetod
- Exception Handler är en uppsättning kod som hanterar ett undantag . Undantag kan hanteras i Java med try & catch.
- Försök blockera : Normal kod fortsätter på detta block.
- Catch block : Om det finns fel i normal kod kommer det att gå in i detta block