Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 7 Exceptions
  gp 7.1 Problembereiche einzäunen
  gp 7.2 Die Klassenhierarchie der Fehler
    gp 7.2.1 Die Exception-Hierarchie
    gp 7.2.2 Ober-Ausnahmen fangen
    gp 7.2.3 Alles geht als Exception durch
    gp 7.2.4 Ausnahmen, die nicht gefangen werden müssen: RuntimeException
  gp 7.3 Werfen eigener Exceptions
    gp 7.3.1 Vorgefertigte Ausnahme-Objekte wiederverwenden
    gp 7.3.2 Typecast auf ein null-Objekt für eine NullPointerException
    gp 7.3.3 Neue Exception-Klassen definieren
  gp 7.4 Rückgabewerte bei ausgelösten Ausnahmen
  gp 7.5 Stack-Aufruf analysieren
  gp 7.6 Assertions
  gp 7.7 Sicherheitsfragen mit dem SecurityManager klären
    gp 7.7.1 Programm beenden


Galileo Computing

7.6 Assertions  toptop

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.

Assertions werden im Java-Quellcode mit folgender Zeile benutzt:

assert AssertConditionExpression [:MessageExpression];

Als Parameter geben wir eine Bedingung an, die an der entsprechenden Stelle im Quelltext erfüllt sein muss. Andernfalls wird das Programm beendet. Optional lässt ein zweiter Parameter einen Text zu, 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) );
  }
}

Damit das Programm kompiliert und ausgeführt werden kann, muss bei dem Compiler und der Laufzeitumgebung noch ein Schalter gesetzt werden. Ein Versuch, die Klasse mit JDK 1.4 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





Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de