User Tools

Site Tools


technology:java:assert_example

Assert example

Assertions are a debated topic in Java. They were implemented in such a way that they throw JVM Errors rather than Exceptions. This means they halt your program at the point of the assertion failure. Here is an example:

package com.freyer.test;
 
public class AssertionTest {
 
    /**
     * @param args
     * No args for this example
     */
    public static void main(String[] args) {
        String s = null;
 
        // test the proper behavior of the method
        say("hello");
 
        // test the improper behavior of the method
        say(s);
    }
 
    private static void say(String s) {
        assert s != null : "string is null";
        System.out.println(s);
    }
 
}

In this code, the line containing say(“hello”); will cause the assertion in the say method to be true and allow the program to function normally. But the line containing say(s); will cause the assertion to fail because variable s is null.

So how can you use assertions in a production application without possibly halting it when something goes wrong? With a JVM flag. The JVM provides a means to enable and disable assertions, as follows:

java -disableassertions com.freyer.test.AssertionTest         -->  disable all assertions
java -da com.freyer.test.AssertionTest                        -->  short-hand
java -da:com.freyer.test... com.freyer.test.AssertionTest     -->  disable assertions by package name
java -da:AssertionTest com.freyer.test.AssertionTest          -->  disable assertions by class name

or

java -enableassertions com.freyer.test.AssertionTest          -->  enable all assertions
java -ea com.freyer.test.AssertionTest                        -->  short-hand
java -ea:com.freyer.test... com.freyer.test.AssertionTest     -->  enable assertions by package name
java -ea:AssertionTest com.freyer.test.AssertionTest          -->  enable assertions by class name

This syntax allows you to active and deactivate assertions globally, by package, or by classname. For greater details, see the JVM docs.

/home/cfreyer/public_html/data/pages/technology/java/assert_example.txt · Last modified: 2009/04/01 10:38 by Chris Freyer