assert-Anweisungen (Annahmen) in Java
Einführendes Beispiel
Eine Annahme bricht das Programm mit einer Fehlermeldung ab, wenn ihr Ausdruck den Wert false hat.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ assert false; }}
Konsole
Exception in thread "main" java.lang.AssertionError
at Main.main(Main.java:3)
⚠ Bei einigen Entwicklungsumgebungen muß die Ausführung solcher Abbrüche erst freigeschaltet werden. Falls das obenstehende Programm keine Laufzeitfehlermeldung ausgibt, so liegt dies vermutlich daran, daß die Ausführung solcher Abbrüche noch nicht freigeschaltet wurde. Das dafür zu verwendende Verfahren hängt von der verwendeten Entwicklungsumgebung ab und ist in der Bedienungsanleitung der Entwicklungsumgebung beschrieben.
Einleitung
Durch eine assert-Anweisung (Annahmeanweisung, kurz: Annahme) kann die Wahrheit einer Aussage festgehalten werden.
Die assert-Anweisung veranlaßt den Abbruch des Prozesses, falls ihre Aussage (Annahmeausdruck, kurz: Annahme) falsch sein sollte. So können Annahmen, welche der Programmierer macht, also Erwartungen des Programmierers, auf verständliche Weise festgehalten und auf wirkungsvolle Weise überprüft werden.
Syntax
.''''''. .----------. .-. .----------. .-.
--->( assert )--->| Ausdruck |---.--->( : )--->| Ausdruck |---.--->( ; )--->
'......' '----------' | '-' '----------' ^ '-'
| |
'----------------------------'
assert ist ein Schlüsselwort.
Typanforderungen (vereinfacht)
Der erste Ausdruck muß den Typ »boolean« haben. Der Metatyp des zweiten Ausdrucks darf nicht »void« sein.
Striktheit (vereinfacht)
Der erste Ausdruck wird immer ausgewertet. Der zweite Ausdruck nur, falls der erste false war.
Semantik (vereinfacht)
Falls der Wert des ersten Ausdrucks false ist und die Prüfung von Annahmen in der Entwicklungsumgebung freigeschaltet wurde, wird das Programm mit einer Fehlermeldung abgebrochen.
Falls ein zweiter Ausdruck angegeben ist, so erscheint dessen Wert dann gegebenenfalls in der ausgegebenen Fehlermeldung.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ assert false: "alpha"; }}- Konsole
Exception in thread "main" java.lang.AssertionError: alpha
at Main.main(Main.java:35)
Erkennen der Inkraftsetzung
Das folgende Beispiel erlaubt es zu erkennen, ob die Prüfung von assert-Anweisungen in der Entwicklungsumgebung freigeschaltet (aktiviert) wurde.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ boolean enabled = false;
assert enabled = true;
java.lang.System.out.println
( "assert-Pruefungen sind " +( enabled ? "" : "nicht " )+ "aktiviert." ); }}java.lang.System.out
assert-Pruefungen sind aktiviert.
Platform.isFxApplicationThread();
Beispiel
Zugriffe auf JavaFX -Objekte sind nur auf dem FX-Anwendungs-Prozessor (FX application thread ) erlaubt. Die folgende Anweisung kann in einer Methode verwendet werden, um sicherzustellen, daß die Methode auch wirklich auf dem Anwendungsprozessor läuft.
- Anweisung
assert javafx.Platform.isFxApplicationThread();
Main.java
public final class Main extends javafx.application.Application
{ public void start( final javafx.stage.Stage window )
{ assert javafx.application.Platform.isFxApplicationThread():
"javafx.application.Platform.isFxApplicationThread()";
java.lang.System.exit( 0 ); }}transcriptMain.java
class Main
{ public static void main( final java.lang.String[] args )
{ assert javafx.application.Platform.isFxApplicationThread():
"javafx.application.Platform.isFxApplicationThread()";
java.lang.System.exit( 0 ); }}transcript
Exception in thread "main" java.lang.AssertionError: javafx.application.Platform.isFxApplicationThread()
at Main.main(Main.java:3)
Beispiel
switch( schulnote )
{ case 1: case 2: case 3: case 4: case 5: case 6: break;
default: assert false: "Can't happen."; break; }