Er zijn twee soorten uitzonderingen: exceptions checked exception en unchecked exceptions. In deze gids zullen we ze bespreken. Het belangrijkste verschil tussen aangevinkte en niet-aangevinkte uitzondering is dat de aangevinkte uitzonderingen worden gecontroleerd tijdens het compileren, terwijl niet-aangevinkte uitzonderingen worden gecontroleerd tijdens runtime.
wat zijn gecontroleerde uitzonderingen?
gecontroleerde uitzonderingen worden gecontroleerd tijdens het compileren., Het betekent dat als een methode is het gooien van een gecontroleerde uitzondering dan moet het omgaan met de uitzondering met behulp van try-catch blok of het moet de uitzondering verklaren met behulp van gooit trefwoord, anders zal het programma een compilatie fout geven.
laat dit begrijpen met behulp van een voorbeeld:
Checked Exception Example
In dit voorbeeld lezen we het bestand myfile.txt
en tonen de inhoud ervan op het scherm. In dit programma zijn er drie plaatsen waar een gecontroleerde uitzondering wordt gegooid zoals vermeld in de commentaren hieronder., Fileputstream die wordt gebruikt voor het specificeren van het bestandspad en de naam, gooit FileNotFoundException
. De read () methode die de bestandsinhoud leest gooit IOException
en de close() methode die de bestandsinvoerstroom sluit gooit ook IOException
.
uitvoer:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
waarom deze compilatiefout? Zoals ik in het begin al zei, wordt gecontroleerd op gechecked exceptions tijdens het compileren. Omdat we de uitzonderingen niet hebben afgehandeld / verklaard, gaf ons programma de compilatiefout.
Hoe de fout op te lossen?, Er zijn twee manieren om deze fout te voorkomen. We zullen beide manieren één voor één zien.
Methode 1: verklaar de uitzondering met behulp van sleutelwoord gooit.
omdat we weten dat alle drie de gevallen van gecontroleerde uitzonderingen zich in de methode main() bevinden, is een manier om de compilatiefout te voorkomen: Declare the exception in the method using throws keyword. Je zou kunnen denken dat onze code is het gooien van FileNotFoundException en IOException beide dan waarom we verklaren de IOException alleen. De reden is dat IOException is een ouder klasse van Bestandenotfoundexception, zodat het standaard dekt dat., Als je wilt kun je ze als volgt declareren public static void main(String args) throws IOException, FileNotFoundException
.
uitvoer:
bestandsinhoud wordt op het scherm weergegeven.
Methode 2: behandel ze met behulp van try-catch-blokken.
De benadering die we hierboven hebben gebruikt is helemaal niet goed. Het is niet de beste manier om uitzonderingen af te handelen. Je moet betekenisvolle boodschap geven voor elk type uitzondering, zodat het voor iemand gemakkelijk zou zijn om de fout te begrijpen. De code zou als volgt moeten zijn:
deze code draait prima en toont de inhoud van het bestand.,
Hier zijn de weinige andere gecontroleerde uitzonderingen –
SQLException
IOException
ClassNotFoundException
InvocationTargetException
wat zijn niet-aangevinkte uitzonderingen?
niet-aangevinkte uitzonderingen worden niet gecontroleerd tijdens het compileren. Het betekent dat als uw programma een ongecontroleerde uitzondering gooit en zelfs als u die uitzondering niet hebt afgehandeld/verklaard, het programma geen compilatiefout geeft. De meeste van de keren dat deze uitzondering optreedt als gevolg van de slechte gegevens die door de gebruiker tijdens de gebruiker-programma interactie., Het is aan de programmeur om de voorwaarden vooraf te beoordelen, die dergelijke uitzonderingen kunnen veroorzaken en ze op de juiste manier kunnen behandelen. Alle niet-aangevinkte uitzonderingen zijn directe subklassen van RuntimeException klasse.
laat dit met een voorbeeld begrijpen:
niet aangevinkt Exception Example
als je deze code compileert, dan compileert het succesvol, maar als je het uitvoert, dan gooit het ArithmeticException
. Dat laat duidelijk zien dat niet-aangevinkte uitzonderingen niet worden gecontroleerd tijdens het compileren, ze komen voor tijdens runtime. Laten we een ander voorbeeld zien.,
deze code zou ook succesvol compileren omdat ArrayIndexOutOfBoundsException
ook een niet-aangevinkte uitzondering is.
Opmerking: Het betekent niet dat de compiler deze uitzonderingen niet controleert, dus we moeten ze niet afhandelen. In feite moeten we ze zorgvuldiger behandelen. Voor bijvoorbeeld in het bovenstaande voorbeeld moet er een uitzondering bericht aan de gebruiker dat ze proberen om een waarde die niet bestaat in array weer te geven, zodat de gebruiker in staat zou zijn om het probleem te corrigeren.,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException