"Ik wil je wat vertellen over hoe uitzonderingen werken. Het onderstaande voorbeeld zou je een globaal idee moeten geven van wat er gebeurt:"
class ExceptionExampleOriginal
{
public static void main(String[] args)
{
System.out.println("main begin");
try
{
System.out.println("main before call");
method1();
System.out.println("main after call");
}
catch (RuntimeException e)
{
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
throw new RuntimeException(s);
}
}
public class ExceptionExample
{
private static Exception exception = null;
public static void main(String[] args)
{
System.out.println("main begin");
System.out.println("main before call");
method1();
if (exception == null)
{
System.out.println("main after call");
}
else if (exception instanceof RuntimeException)
{
RuntimeException e = (RuntimeException) exception;
exception = null;
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
if (exception != null) return;
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
exception = new RuntimeException(s);
return;
}
}
"Ik ben helemaal verloren."
'Oké. Laat me uitleggen wat er aan de hand is.'
"In het voorbeeld aan de linkerkant roepen we achtereenvolgens een paar methoden aan. In method2
maken we opzettelijk een uitzondering (we creëren een fout)."
"Het voorbeeld rechts laat zien wat er gebeurt."
"Kijk naar method2
. In plaats van een uitzondering te maken, maken we een RuntimeException
object, slaan het op in de statische variabele exception
en verlaten de methode onmiddellijk met een return
instructie."
"In method1
, na het aanroepen method2
controleren we of er een uitzondering is. Als er een uitzondering is, dan method1
stopt het meteen. Een dergelijke controle wordt indirect uitgevoerd na elke (!) methodeaanroep in Java."
"Wauw!"
"Wauw klopt."
"In de rechterkolom heb ik de hoofdmethode gebruikt om ongeveer te laten zien wat er gebeurt als een uitzondering wordt opgevangen met behulp van een try-catch-constructie. Als er geen uitzondering is, blijft alles draaien zoals verwacht. Als er een uitzondering is en het hetzelfde type is als gespecificeerd in de catch-instructie, dan behandelen we het."
"Wat doen throw
en instanceof
betekenen? "
"Kijk naar de laatste regel: throw new RuntimeException(s);
. Zo maak en gooi je een uitzondering. Daar gaan we nog niet aan werken. Het was maar een voorbeeld."
"We gebruiken a instanceof B
om te controleren of het object a
van het type is B
, dwz of het object waarnaar wordt verwezen door de variabele uitzondering een RuntimeException is. Dit is een booleaanse uitdrukking."
'Ik denk dat ik het snap. Bijna.'
GO TO FULL VERSION