Assertion

Från SDK 1.4 finns assertions i Java. Liksom i C är det en mekanism för att kolla om ett villkor är sant och avbryta exekveringen (eventuellt även skriva ut ett meddelande) om det inte är sant.

Hur fungerar assertions?

Kod

Syntaxen är assert <boolean statement> eller assert <boolean statement> : <message>. Om <boolean statement> är sant händer ingenting. Om det är fel avbryts exekveringen. Om <message> har angivits skrivs det ut. <message> måste vara en String eller en primitiv typ. Koden
assert <boolean statement> : <message>
fungerar ungefär som
if (!<boolean statement>) {
throw new AssertionError(<message>);
}

Exekvering

För att använda assertions måste programmet kompileras med switchen -source 1.4. Assertions kan sättas på och stängas av vid exekvering, default är de avstängda vilket innebär att de inte påverkar exekveringen. Switchen -ea sätter på assertions. Det går också att sätta på assertions för bara en viss klass (-ea:<class name>), för ett visst paket (-ea:<package name>...) och för systemklasser (-esa).

Här kommer ett litet program bara för att testa att det fungerar, TestAssertion.java. Kompilera det med javac -source 1.4 TestAssertions.java och exekvera det med java  -ea TestAssertions. Om det funkar kastas ett AssertionError och texten Assertions are enabled skrivs ut. Om det inte funkar blir det inget undantag och i stället skrivs texten Assertions are not enabled.

När ska assertions användas?

Assertions är enbart ett debug-hjälpmedel. En kort och enkel (och grov) regel är att assertions ska enbart användas vid utveckling för att kolla antaganden som tas för givna. Ett exempel är att vi i en metod som beräknar kvadratroten av ett tal kan kolla att inparametern inte är negativ. Mer detaljerade riktlinjer för användandet kommer här:

Använd assertions för att:
Använd inte assertions för att: