7.6 Assertions
 
Kleine Änderungen in der Sprache Java gab es immer wieder. In Java 1.1 wurden innere Klassen eingeführt, in Java 1.3 das Schlüsselwort strict und in Java 1.4 das Schlüsselwort assert. Die Übersetzung des englischen Worts »assertion« zeigt die Bedeutung dieses Sprachkonstrukts: Behauptungen. Mit diesen werden innerhalb von Methoden Zusicherungen (Vor- und Nachbedingungen) aufgestellt, die deren korrekten Ablauf garantieren sollen. Ist eine Bedingung nicht erfüllt, wird ein Fehler ausgelöst, der darauf hinweist, dass im Programm etwas falsch gelaufen sein muss. Die ausgelösten Fehler sind vom Typ »Error« und nicht vom Typ »Exception« und sollten daher auch nicht aufgefangen werden, da eine nicht erfüllte Bedingung ein Programmierfehler ist.
7.6.1 Assertions in eigenen Programmen nutzen
 
Assertions werden im Java-Quellcode mit folgender Anweisung benutzt:
assert AssertConditionExpression [:MessageExpression];
AssertConditionExpression steht für eine Bedingung, die zur Laufzeit ausgewertet wird. Wertet sich das Ergebnis zu true aus, führt die Laufzeitumgebung die Abarbeitung normal weiter, ergibt die Auswertung false, wird das Programm beendet. Der optionale zweiter Parameter MessageExpression ist ein Text, der beim Stacktrace als Nachricht in der Fehlermeldung erscheint.
Beispiel Eine Methode div() muss eine Zahl ungleich Null bekommen. Sollte irgendein Programmteil fehlerhaft sein und den Divisor doch mit Null belegen, muss ein Assert-Error erfolgen.
Listing 7.13
AssertKeyword.java
public class AssertKeyword
{
public static int div( int divident, int divisor )
{
assert divisor != 0 : "Oh bitte keine Zahl durch null teilen.";
return divident/divisor;
}
public static void main( String args[] )
{
System.out.println( "Quotient ist " + div(10, 2) );
System.out.println( "Quotient ist " + div(10, 0) );
}
}
|
7.6.2 Assertions aktivieren
 
Damit das Programm kompiliert und ausgeführt werden kann, muss beim Compiler und bei der Laufzeitumgebung noch ein Schalter gesetzt werden. Ein Versuch, vor Java 5 die Klasse ohne den passenden Schalter zu übersetzen, schlägt mit einer Fehlermeldung »not a statement« fehl.
Beispiel Übersetze die Klasse AssertKeyword.java mit Assertion-Fähigkeit
$ javac -source 1.4 AssertKeyword.java
|
Die Überprüfung von Assertions zur Laufzeit ist standardmäßig abgeschaltet. Dadurch entsteht kein Geschwindigkeitsverlust bei der Ausführung der Programme. Um Assertions zu aktivieren, muss die Laufzeitumgebung mit dem Schalter –ea (enable assertions) gestartet werden.
Beispiel Starte AssertKeyword mit Zusicherungen.
$ java –ea AssertKeyword
|
 Hier klicken, um das Bild zu Vergrößern
 Hier klicken, um das Bild zu Vergrößern
|