Assertions
An assertion is a statement containing a boolean expression that is assumed to be true when the statement is executed. The system reports an AssertionError if the expression evaluates to false. It is used for debugging purposes:
assert(a > 0); // throws an AssertionError if a <= 0
Assertions can be in two forms:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 should always result in a boolean value.
Expression2 can be anything that results in a value. The value is used to generate a String message that displays more debugging information. For instance:
class AssertionTest
{
int a ;
public void func()
{
assert (a < 0): "a is positive" ;
// Remaining code
}
}
In the above code, the assertion expression is true if a is negative. If a is positive, an AssertionError is thrown with the message "a is positive."
Assertions are disabled by default. To compile with assertions enabled, you need to use the source 1.4 flag:
javac -source 1.4 Test.java
To enable assertions at runtime, use the -enableassertions or -ea flags.
For selective disabling of assertions at runtime, use the -da or -disableassertions flags.
For enabling assertions in the system classes, use the -esa or -dsa flags. Assertions can also be enabled or disabled on a package basis.
Appropriate and inappropriate use of assertions
You can place an assertion at any location that you don't expect to be reached normally. Assertions can be used to validate the parameters passed to a private method. However, assertions should not be used to validate parameters passed to public methods because a public method must check its arguments regardless of whether assertions are enabled or not. However, you can test postconditions with assertions in both public and non-public methods. Also, assertions should not change the state of a program in any manner.
1 comment: