Wat is een uitzondering in Java?
Uitzondering in Java is een gebeurtenis die de uitvoering van programma-instructies onderbreekt en de normale stroom van programma-uitvoering verstoort. Het is een object dat een foutgebeurtenisinformatie verpakt die binnen een methode is opgetreden en wordt doorgegeven aan het runtime-systeem. In Java worden uitzonderingen voornamelijk gebruikt om verschillende soorten foutcondities aan te geven.
In deze tutorial leer je-
- Wat is een uitzondering?
- Waarom hebben we een uitzondering nodig?
- Omgaan met uitzonderingen
- Probeer Catch Block
- Hiërarchie van Java-uitzonderingsklasse
- Java Eindelijk blokkeren
Er zijn twee soorten fouten:
- Compileer tijdfouten
- Runtime-fouten
Compilatietijdfouten kunnen weer in twee typen worden ingedeeld:
- Syntaxisfouten
- Semantische fouten
Voorbeeld van syntaxisfouten:
In plaats van te verklaren
int a;
je hebt per abuis verklaard in a;
dat de compiler een fout zal genereren.
Voorbeeld: u heeft een variabele gedeclareerd
int a;
en na enkele regels code declareer je opnieuw een geheel getal als int a;
. Al deze fouten worden gemarkeerd wanneer u de code compileert.
Voorbeeld van runtime-fouten
Een runtime-fout wordt een uitzonderingsfout genoemd . Het is elke gebeurtenis die de normale stroom van programma-uitvoering onderbreekt.
Voorbeelden van uitzonderingen zijn: rekenkundige uitzondering, Nullpointer-uitzondering, Delen door nul-uitzondering, enz.
Uitzonderingen in Java zijn iets waar de ontwikkelaars geen controle over hebben.
Klik hier als de video niet toegankelijk is
Waarom hebben we een uitzondering nodig?
Stel dat u een programma heeft gecodeerd om toegang te krijgen tot de server. Alles werkte prima tijdens het ontwikkelen van de code.
Tijdens de feitelijke productierun is de server uitgeschakeld. Wanneer uw programma er toegang toe probeerde te krijgen, wordt er een uitzondering gemaakt.
Omgaan met uitzonderingen
Tot dusver hebben we gezien dat de ontwikkelaar geen controle heeft over uitzonderingen. Maar uw codefout de schuld geven van milieukwesties is geen oplossing. U hebt een robuuste programmering nodig, die voor uitzonderlijke situaties zorgt. Dergelijke code staat bekend als Exception Handler.
In ons voorbeeld zou een goede afhandeling van uitzonderingen zijn, wanneer de server niet actief is, verbinding maken met de back-upserver.
Om dit te implementeren, voert u uw code in om verbinding te maken met de server (met behulp van traditionele if en else-voorwaarden).
U zult controleren of de server niet werkt. Zo ja, schrijf de code om verbinding te maken met de back-upserver.
Een dergelijke organisatie van code, met behulp van de "if" en "else" -lus is niet effectief als uw code meerdere Java-uitzonderingen heeft om af te handelen.
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
Probeer Catch Block
Java biedt een ingebouwde uitzonderlijke afhandeling.
- De normale code gaat in een TRY- blok.
- De code voor het afhandelen van uitzonderingen gaat naar het CATCH- blok
In ons voorbeeld bevat het TRY-blok de code om verbinding te maken met de server. CATCH-blok bevat de code om verbinding te maken met de back-upserver.
Als de server actief is, wordt de code in het CATCH-blok genegeerd. Als de server down is, wordt er een uitzondering gegenereerd en wordt de code in het catch-blok uitgevoerd.
Dit is dus hoe de uitzondering wordt afgehandeld in Java.
Syntaxis voor het gebruik van try & catch
try{statement(s)}catch (exceptiontype name){statement(s)}
Voorbeeld
Stap 1) Kopieer de volgende code naar een 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");}}
Stap 2) Sla het bestand op en compileer de code. Voer het programma uit met de opdracht java JavaException
Stap 3) Een rekenkundige uitzondering - delen door nul wordt weergegeven zoals hieronder voor regel # 5 en regel # 6 wordt nooit uitgevoerd
Stap 4) Laten we nu eens kijken hoe proberen en vangen ons zal helpen om met deze uitzondering om te gaan. We plaatsen de uitzondering waardoor de regel code in een try- blok wordt geplaatst, gevolgd door een catch- blok. Kopieer de volgende code naar de editor.
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");}}
Stap 5) Bewaar, compileer en voer de code uit. U krijgt de volgende uitvoer
Zoals u opmerkt, wordt de uitzondering afgehandeld en wordt ook de laatste regel code uitgevoerd. Merk ook op dat regel # 7 niet zal worden uitgevoerd, want zodra een uitzondering wordt verhoogd, springt de stroom van besturing naar het catch-blok.
Opmerking: het AritmeticException-object "e" bevat informatie over de uitzondering die is opgetreden, wat handig kan zijn bij het nemen van herstelacties.
Hiërarchie van Java-uitzonderingsklasse
Nadat een catch-instructie is uitgevoerd, worden de andere overgeslagen en wordt de uitvoering voortgezet na het try / catch-blok. De geneste catch-blokken volgen de uitzonderingshiërarchie.- Alle uitzonderingsklassen in Java breiden de klasse 'Throwable' uit. Throwable heeft twee subklassen, Error en Exception
- De klasse Error definieert de uitzondering of de problemen die onder normale omstandigheden niet door ons programma worden verwacht, bijvoorbeeld geheugenfout, hardwarefout, JVM-fout, enz.
- De Exception-klasse vertegenwoordigt de uitzonderingen die door ons programma kunnen worden afgehandeld, en ons programma kan van deze uitzondering worden hersteld met behulp van het try and catch-blok
- Een Runtime-uitzondering is een subklasse van de uitzonderingsklasse. De uitzondering van dit type vertegenwoordigt een uitzondering die optreedt tijdens de uitvoering en die niet kan worden gevolgd tijdens het compileren. Een uitstekend voorbeeld hiervan is delen door nul-uitzondering, of null-pointer-uitzondering, enz
- IO-uitzondering wordt gegenereerd tijdens invoer- en uitvoerbewerkingen
- Onderbroken uitzonderingen in Java, worden gegenereerd tijdens multiple threading.
Stap 1) Kopieer de volgende code naar een 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");}}
Stap 2) Sla het bestand op en compileer de code. Voer het programma uit met de opdracht java JavaException .
Stap 3) Er wordt een ArrayIndexOutOfBoundsException gegenereerd. Verander de waarde van int d in 0. Bewaar, compileer en voer de code uit.
Stap 4 ) Er moet een ArithmeticException worden gegenereerd.
Stap 5) Uncomment regel # 10 naar regel # 12. Bewaar, compileer en voer de code uit.
Stap 6) Compilatiefout? Dit komt doordat Exception de basisklasse is van ArithmeticException Exception. Elke uitzondering die wordt opgewekt door ArithmeticException kan ook worden afgehandeld door de Exception-klasse, dus het catch-blok van ArithmeticException krijgt nooit de kans om te worden uitgevoerd, wat het overbodig maakt. Vandaar de compilatiefout.
Java Eindelijk blokkeren
Het laatste blok wordt uitgevoerd ongeacht of er een uitzondering wordt gegenereerd in het try-blok. Het is optioneel om te gebruiken met een try-blok.
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
In het geval dat er een uitzondering wordt gegenereerd in het try-blok, wordt het blok uiteindelijk uitgevoerd nadat het catch-blok is uitgevoerd.
Voorbeeld
Stap 1) Kopieer de volgende code naar een 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");}}}
Stap 2) Bewaar, compileer en voer de code uit.
Stap 3) Verwachte output. Ten slotte wordt het blok uitgevoerd, ook al wordt er een uitzondering gemaakt.
Stap 4) Wijzig de waarde van variabele d = 1. Bewaar, compileer en voer de code uit en bekijk de uitvoer.
Samenvatting :
- Een uitzondering is een runtime-fout die de normale stroom van programma-uitvoering onderbreekt. Onderbreking tijdens de uitvoering van het programma wordt fout of uitzondering genoemd.
- Fouten worden in twee categorieën ingedeeld
- Compilatietijdfouten - syntaxisfouten, semantische fouten
- Runtime-fouten - Uitzondering
- Een robuust programma moet alle uitzonderingen afhandelen en doorgaan met de normale uitvoering van het programma. Java biedt een ingebouwde uitzonderlijke verwerkingsmethode
- Exception Handler is een set code die een exception afhandelt . Uitzonderingen kunnen in Java worden afgehandeld met behulp van try & catch.
- Probeer blok : normale code gaat op dit blok.
- Catch-blok : als er een fout in de normale code zit, gaat deze naar dit blok