ProblemYou want to leave tests in your code but not have runtime checking overhead until you need it. SolutionUse the JDK 1.4 Assertions mechanism. DiscussionJDK 1.4 introduced a new keyword into the language: assert. The assert keyword takes two arguments separated by a colon (by analogy with the conditional operator): an expression that is asserted by the developer to be true, and a message to be included in the exception that is thrown if the expression is false. To provide for backward compatibility with programs that might have used "assert" as an identifier name on prior JDK versions, JDK 1.4 requires a command-line switch (-source 1.4) that must be provided for assert to be recognized as a keyword. Normally, assertions are meant to be left in place (unlike quick and dirty print statements, which are often put in during one test and then removed). To reduce runtime overhead, assertion checking is not enabled by default; it must be enabled explicitly with the -enableassertions (or -ea) command-line flag. Here is a simple demo program that shows the use of the assertion mechanism: ian:147$ cd testing; ian:148$ cat AssertDemo.java public class AssertDemo { public static void main(String[] args) { int i = 4; if (args.length == 1) { i = Integer.parseInt(args[0]); } assert i > 0 : "i is non-positive"; System.out.println("Hello after an assertion"); } } ian:149$ javac -source 1.4 AssertDemo.java # will not compile without 1.4 flag ian:150$ java AssertDemo -1 Hello after an assertion ian:151$ java -ea AssertDemo -1 Exception in thread "main" java.lang.AssertionError: i is non-positive at AssertDemo.main(AssertDemo.java:15) ian:152$ |