home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Assertions

Assertions werden eingesetzt um Vor- und Nachbedingungen prüfen zu können (z.B. dass Preise positiv sein müssen). Das Schlüsselwort dafür heisst assert (gibt es seit Java 1.4). Die Syntax lautet folgendermaßen

assert <BEDINGUNG>:<[BESCHREIBUNG]>;

wobei die Beschreibung optional ist und die Bedingung immer vom Typ boolean sein muss, ansonsten gibt es einen Compilerfehler.

Um Assertions zu aktivieren muss der JVM Parameter ea mit angegeben werden (z.B. java -ea assertions.AssertionTest). Wird ein Programm, das assert-Anweisungen enthält, mit deaktivierten Assertions aufgerufen, verhält es sich, als wären die entsprechenden Zeilen nicht vorhanden.

Wenn Assertions aktiviert sind überprüft das Programm die Bedingung und fährt fort, wenn sie erfüllt ist, andernfalls wird ein AssertionError erzeugt. Wenn die <BESCHREIBUNG> fehlt, hat der AssertionError eine leere Fehlermeldung, ansonsten wird der dort beschriebene Ausdruck an den Konstruktor von AssertionError übergeben und dient als Meldungstext für das Fehlerobjekt.

Auch wenn die selben Tests auch mit einer if-Anweisung gemacht werden könnten, ist es oft empfehlenswert auf Assertions zurückzugreifen:

  • Der Programmcode ist kürzer.
  • Auf den ersten Blick ist zu erkennen, dass es sich um einen Korrektheits-Check handelt und nicht um eine Verzweigung zur Steuerung des Programmablaufs.
  • Assertions lassen sich zur Laufzeit wahlweise an- oder ausschalten. Im Gegensatz zu einer einfachen if-Anweisung verursachen sie praktisch keine Verschlechterung des Laufzeitverhaltens, wenn sie deaktiviert sind.

Jedoch sollten Assertions nur bei der Entwicklung eingesetzt werden und außerdem nie bei public-Methoden oder Kommandozeilenparametern. Diese Überprüfungen sollten immer aktiv sein und nicht abschaltbar sein.

package progstruk.assertions;

import java.util.Scanner;

public class AssertTest {
  public static void main(String args[]) {
    Scanner input = new Scanner(System.in);

    System.out.print("Bitte eine Zahl zwischen 0 und 10 eingeben: ");
    int number = input.nextInt();

    // hier wird mit assert geprüft ob die Zahl >= 0 und <=10 ist
    assert (number >= && number <= 10"falsche Zahl: " + number;

    System.out.println("Sie haben folgende Zahl eingeben " + number);
  
Bitte eine Zahl zwischen 0 und 10 eingeben: -7

 

Bitte eine Zahl zwischen 0 und 10 eingeben: -7

Exception in thread "main" java.lang.AssertionError: falsche Zahl: -7

at progstruk.assertions.AssertTest.main(AssertTest.java:13)

 

 

Diese Fehlermeldung wird ausgegeben, wenn Assertions aktiviert sind und eine Zahl eingegeben wird, die nicht zwischen 0 und 8 eingeben wird.

Nützlicher Link:
Galileo Computing