7.6 Assertions
 
Ä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, in Java 1.4 das Schlüsselwort assert und in Java 5 neben weiteren Änderungen auch Aufzählungen mit enum.
7.6.1 Assertions in Java
 
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.2 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 Stack-Trace 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.15
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.3 Assertions aktivieren
 
Ein aktueller Java-Compiler übersetzt das Beispiel ohne Fehler, doch zur Laufzeit werden die Assertions standardmäßig nicht beachtet, da sie abgeschaltet sind. Somit 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
Die Ausgabe ist dann:
Quotient ist 5
Exception in thread "main" java.lang.AssertionError: Oh bitte keine Zahl durch Null teilen.
at AssertKeyword.div(AssertKeyword.java:5)
at AssertKeyword.main(AssertKeyword.java:14)
|
 Hier klicken, um das Bild zu Vergrößern
Abbildung 7.1
Wurde das Programm schon gestartet, kann im Menü Run/Run... im Reiter Arguments bei den VM arguments der Schalter -ea gesetzt werden.
|