Assertions sind Zusicherungen, die zur Kontrolle des Programmablaufes verwendet werden.

Assertions werden innerhalb von Methoden verwendet, um gewisse Bedingungen zur Laufzeit sicherzustellen.

So können z.B. die Korrektheit von übergebenen Werten und Typen oder der Wertebereich von Rückgaben überprüft werden.
Wenn die erwarteten Ergebnisse nicht eintreten, wird bei aktivierten Assertions ein AssertionError geworfen. Hierzu ist es neben den jeweiligen Aufrufen des assert-Statements im Quelltext noch notwendig, die Assertions zur Laufzeit zu aktivieren. Dies hat den Vorteil, dass beim Produktiveinsatz des Programms, die Assertions von der Laufzeitumgebung nicht beachtet werden. Sie können somit problemlos bei der Auslieferung im Programm verbleiben.

Assertions einbinden

Das Beispiel unten zeigt die Art und Weise, wie Assertions in ein Programm eingebunden werden können.
In main() erfolgt dort der zweimalige Aufruf der Methode gibEtwasAus(), die als Parameter ein Objekt vom Typ Object erwartet. Innerhalb dieser Methode wird der übergebene Wert daraufhin geprüft, ob er vom Typ Etwas ist. Ist dies der Fall, so wird der Wert einer Variablen ausgegeben und die Methode wird beendet. Im anderen Fall wird ein AssertionError mit einem entsprechenden Hinweis geworfen. Dies verdeutlicht die notwendige Syntax für den Aufruf:

assert boolscher Ausdruck : Wert

Wert wird zusammen mit einer Fehlermeldung ausgegeben, wenn der boolsche Ausdruck false ist. Für diesen kann somit z.B. auch ein Methodenaufruf stehen, der einen boolschen Rückgabewert besitzt.
Der Konstruktor von Etwas bekommt im Beispiel einen int-Wert übergeben, der ebenfalls geprüft wird: Ist dieser kleiner 11, so wird wiederum ein AssertionError ausgelöst und das Programm terminiert an dieser Stelle. Der o.a. Fall tritt im Beispiel somit gar nicht ein, da bei der Objektbildung ein Wert von 1 übergeben wird.

public class AssertionsClass {

    public static void main(String[] args) {
        gibEtwasAus(new Etwas(1)); // wirft AssertionError in Etwas() da 1 < 11
        gibEtwasAus(new Object());
    }

    private static void gibEtwasAus(Object e){
        if(e instanceof Etwas){
            System.out.println(((Etwas) e).etwas);
            return;
        }
        assert false : "Dateityp ist nicht 'Extras'";
    }
}

class Etwas {
    int etwas;
    public Etwas(int e){
        this.etwas = e;
        assert etwas > 10 : etwas + " <= 10";
    }
}

Assertions aktivieren

Um sie zu aktivieren, muss der Programmaufruf mit der Option -ea gefolgt von einem Doppelpunkt erfolgen. Um z.B. Assertions für eine Klasse zu aktivieren, so wird deren voll qualifizierter Name nach dem Doppelpunkt genannt:

java -ea:mein.package.MeineKlasse

Wird der Schalter -ea mit einem Argument und anschließenden drei Punkten (...) gesetzt, so werden Assertions im spezifizierten Package und den zugehörigen Unter-Packages aktiviert.

java -ea:mein.package...

Besteht das Argument lediglich aus drei Punkten (...), so werden Assertions im unbenannten Package des aktuellen Arbeitsverzeichnisses aktiviert.

java -ea:...

Auch eine differenziertere Angabe ist möglich, indem Assertions in einigen Klassen aktiviert und in anderen deaktiviert werden. Zur Deaktivierung wird die Option -da verwendet.

Im folgenden Beispiel wird die Klasse MeineKlasse aufgerufen, wobei Assertions im Package mein.package.meinProg und seinen Unter-Packages aktiviert und in der Klasse mein.package.meinProg.MeineKlasse deaktiviert werden:

java -ea:mein.package.meinProg... -da:mein.package.meinProg.MeineKlasse

Wird das u.a. Programm in einem Package assertions platziert (hierzu muss natürlich die Package-Angabe dem abgebildeten Quelltext noch hinzugefügt werden), so führt der Start des Programms mit den Optionen

-ea:assertions... -da:assertions.AssertionsClass

zu der Ausgabe

Exception in thread "main" java.lang.AssertionError: 1 <= 10
    at assertions.Etwas.<init>(AssertionsClass.java:46)
    at assertions.AssertionsClass.main(AssertionsClass.java:29)
Quellen

https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.