Op Java, uitzondering is een gebeurtenis die plaatsvindt tijdens de uitvoering van een programma en die de normale stroom van de programma-instructies verstoort. Bugs of fouten die we niet willen en die de normale uitvoering van code door ons programma beperken, worden ' uitzonderingen . In dit deel zullen we ons concentreren op de soorten uitzonderingen in Java en de verschillen tussen de twee.
Uitzonderingen kunnen op twee manieren worden onderverdeeld:
- Ingebouwde uitzonderingen
- Uitzondering aangevinkt
- Niet-aangevinkte uitzondering
- Door de gebruiker gedefinieerde uitzonderingen
Ingebouwde uitzondering
Uitzonderingen die al beschikbaar zijn Java-bibliotheken worden genoemd ingebouwde uitzondering . Deze uitzonderingen kunnen de foutsituatie definiëren, zodat we de reden voor het krijgen van deze fout kunnen begrijpen. Het kan worden onderverdeeld in twee brede categorieën, namelijk gecontroleerde uitzonderingen En ongecontroleerde uitzondering .
Uitzondering aangevinkt
Gecontroleerd uitzonderingen worden genoemd compileertijd uitzonderingen omdat deze uitzonderingen tijdens het compileren door de compiler worden gecontroleerd. De compiler zorgt ervoor dat de programmeur de uitzondering afhandelt of niet. De programmeur zou de uitzondering moeten afhandelen; anders heeft het systeem een compilatiefout weergegeven.
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } }
In de bovenstaande code proberen we de Hallo.txt bestand en geef de gegevens of inhoud ervan op het scherm weer. Het programma genereert de volgende uitzonderingen:
- De FileInputStream(bestandsnaam) constructor gooit de FileNotFoundException dat is een gecontroleerde uitzondering.
- De lezen() werkwijze van de FileInputStream klas gooit de IOUitzondering .
- De dichtbij() methode genereert ook de IOException.
Uitgang:
mamta kulkarni-acteur
Hoe de fout oplossen?
Er zijn in principe twee manieren waarop we deze fouten kunnen oplossen.
1) De uitzonderingen komen voor in de hoofdmethode. We kunnen van deze compilatiefouten afkomen door de uitzondering in de hoofdmethode te declareren met behulp van de worpen We declareren alleen de IOException, niet FileNotFoundException, vanwege de kind-ouderrelatie. De IOException-klasse is de bovenliggende klasse van FileNotFoundException, dus deze uitzondering wordt automatisch gedekt door IOException. Wij verklaren de uitzondering op de volgende manier:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Als we de code compileren en uitvoeren, verdwijnen de fouten en zien we de gegevens van het bestand.
2) We kunnen deze uitzonderingen ook afhandelen met behulp van proberen te vangen De manier die we hierboven hebben gebruikt, is echter niet correct. We moeten voor elk uitzonderingstype een betekenisvol bericht geven. Door dat te doen, zou het gemakkelijk zijn om de fout te begrijpen. We zullen het try-catch-blok op de volgende manier gebruiken:
Uitzondering.java
Salman Khan leeftijd
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } }
We zullen een juiste foutmelding zien 'Bestand niet gevonden!' op de console omdat er geen dergelijk bestand op die locatie staat.
Niet-aangevinkte uitzonderingen
De niet aangevinkt uitzonderingen zijn precies het tegenovergestelde van de gecontroleerd uitzonderingen. De compiler controleert deze uitzonderingen niet tijdens het compileren. In eenvoudige woorden: als een programma een ongecontroleerde uitzondering genereert, en zelfs als we deze niet hebben afgehandeld of gedeclareerd, geeft het programma geen compilatiefout. Meestal komt dit voor wanneer de gebruiker slechte gegevens verstrekt tijdens de interactie met het programma.
Opmerking: De klasse RuntimeException kan alle niet-gecontroleerde uitzonderingen oplossen vanwege de relatie tussen kind en ouder.
UncheckedExceptionExample1.java
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } }
In het bovenstaande programma hebben we 35 gedeeld door 0. De code zou met succes worden gecompileerd, maar tijdens runtime zal er een ArithmeticException-fout optreden. Bij het delen van een getal door 0 wordt de uitzondering voor delen door nul gegenereerd, wat een uitzondering is die het vinkje uitschakelt.
Uitgang:
UitgeschakeldException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Uitgang:
In de bovenstaande code proberen we het element op positie 7 te krijgen, maar de lengte van de array is 6. De code wordt succesvol gecompileerd, maar genereert de ArrayIndexOutOfBoundsException tijdens runtime.
Door de gebruiker gedefinieerde uitzondering
In Java , we hebben al enkele ingebouwde uitzonderingsklassen, zoals ArrayIndexOutOfBoundsException , NullPointerException , En Rekenkundige uitzondering . Deze uitzonderingen zijn beperkt tot activering onder bepaalde vooraf gedefinieerde voorwaarden. In Java kunnen we onze eigen uitzonderingsklasse schrijven door de klasse Exception uit te breiden. We kunnen onze eigen uitzondering op een bepaalde voorwaarde genereren met behulp van het trefwoord throw. Voor het maken van een door de gebruiker gedefinieerde uitzondering moeten we basiskennis hebben de proberen te vangen blok en gooien trefwoord .
Laten we een schrijven Java-programma en maak een door de gebruiker gedefinieerde uitzondering.
UserDefinedException.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } }
Uitgang:
de cijfers van het alfabet
Beschrijving:
In de bovenstaande code hebben we twee klassen gemaakt, d.w.z. Door gebruiker gedefinieerde uitzondering En NieuweUitzondering . De Door gebruiker gedefinieerde uitzondering heeft onze belangrijkste methode, en de NieuweUitzondering class is onze door de gebruiker gedefinieerde uitzonderingsklasse, die zich uitstrekt uitzondering . In de NieuweUitzondering klasse, creëren we een variabele X van het type geheel getal en wijs er een waarde aan toe in de constructor. Nadat we een waarde aan die variabele hebben toegewezen, retourneren we het uitzonderingsbericht.
In de Door gebruiker gedefinieerde uitzondering klasse, we hebben een toegevoegd proberen te vangen blok. In de try-sectie gooien we de uitzondering, d.w.z. NieuweUitzondering en geef er een geheel getal aan door. De waarde wordt doorgegeven aan de NewException-klasse en retourneert een bericht. We vangen dat bericht op in het catch-blok en tonen het op het scherm.
Verschil tussen aangevinkte en niet-gecontroleerde uitzondering
Ja nee | Uitzondering aangevinkt | Niet-aangevinkte uitzondering |
---|---|---|
1. | Deze uitzonderingen worden tijdens het compileren gecontroleerd. Deze uitzonderingen worden ook tijdens het compileren afgehandeld. | Deze uitzonderingen zijn precies het tegenovergestelde van de gecontroleerde uitzonderingen. Deze uitzonderingen worden tijdens het compileren niet gecontroleerd en afgehandeld. |
2. | Deze uitzonderingen zijn directe subklassen van uitzonderingen, maar niet uitgebreid vanuit de RuntimeException-klasse. | Het zijn de directe subklassen van de RuntimeException-klasse. |
3. | De code geeft een compilatiefout als een methode een gecontroleerde uitzondering genereert. De compiler kan de uitzondering niet zelfstandig afhandelen. | De code compileert zonder enige fout, omdat de uitzonderingen aan de aandacht van de compiler ontsnappen. Deze uitzonderingen zijn het resultaat van door de gebruiker gemaakte fouten in de programmeerlogica. |
4. | Deze uitzonderingen komen vooral voor als de kans op falen te groot is. | Deze uitzonderingen komen meestal voor als gevolg van programmeerfouten. |
5. | Veelvoorkomende gecontroleerde uitzonderingen zijn IOException, DataAccessException, InterruptedException, enz. | Veelvoorkomende niet-gecontroleerde uitzonderingen zijn ArithmeticException, InvalidClassException, NullPointerException, enz. |
6. | Deze uitzonderingen worden doorgegeven met behulp van het trefwoord throws. | Deze worden automatisch doorgegeven. |
7. | Het is vereist om het try-catch- en try-finally-blok op te geven om de gecontroleerde uitzondering af te handelen. | In het geval van een niet-aangevinkte uitzondering is dit niet verplicht. |
Bugs of fouten die we niet willen en die de normale uitvoering van de programma's beperken, worden ' uitzonderingen .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions enz. vallen in de categorie van Ingebouwde uitzondering . Soms zijn de ingebouwde uitzonderingen niet voldoende om bepaalde situaties uit te leggen of te beschrijven. Om deze situaties te beschrijven, moeten we onze eigen uitzonderingen maken door een uitzonderingsklasse te maken als subklasse van de Uitzondering klas. Dit soort uitzonderingen vallen in de categorie van Door de gebruiker gedefinieerde uitzondering .