Java/Language Basics/Assert

Материал из Java эксперт
Перейти к: навигация, поиск

A Program with Assertions

 

public class Main {
  public static void main(String[] args) {
    assert args.length > 0;
  }
}





Assert with an informative message

 
//: c15:Assert2.java
// {JVMArgs: -ea}
// {ThrowsException}
// From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.
public class Assert2 {
  public static void main(String[] args) {
    assert false: "Here"s a message saying what happened";
  }
}





Catch assert exception with message

 
public class Main {
  public static void main(String[] argv) throws Exception {
    try {
      assert argv.length > 0 : "my message";
    } catch (AssertionError e) {
      String message = e.getMessage();
      System.out.println(message);
    }
  }
}





Class for checking syntax and comments for the assert

 
/*
 *     file: Assertions.java
 *  package: oreilly.hcj.review
 *
 * This software is granted under the terms of the Common Public License,
 * CPL, which may be found at the following URL:
 * http://www-124.ibm.ru/developerworks/oss/CPLv1.0.htm
 *
 * Copyright(c) 2003-2005 by the authors indicated in the @author tags.
 * All Rights are Reserved by the various authors.
 *
########## DO NOT EDIT ABOVE THIS LINE ########## */

import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**  
 * Class for checking syntax and comments for the assert section of the review chapter.
 *
 * @author 
 */
public class Assertions {
  /** 
   * Main method.
   *
   * @param args Command line arguments.
   */
  public static void main(final String[] args) {
    helperParseArgs(args);
    Iterator iter = System.getProperties()
                        .keySet()
                        .iterator();
    for (String key = null; iter.hasNext(); key = (String)iter.next()) {
      assert (key != null);
      System.out.println(key + "=" + System.getProperty(key));
    }
  }
  /** 
   * __UNDOCUMENTED__
   *
   * @param event __UNDOCUMENTED__
   */
  public void mouseClicked(final MouseEvent event) {
    Object source = event.getSource();
    assert (source != null);
    // ... do code using source
  }
  /** 
   * __UNDOCUMENTED__
   *
   * @param args __UNDOCUMENTED__
   *
   * @throws IllegalArgumentException __UNDOCUMENTED__
   */
  protected static void helperParseArgs(final String[] args) {
    assert (args != null);
    assert (!Arrays.asList(args)
                   .contains(null));
    // --
    List arglist = Arrays.asList(args);
    Iterator iter = arglist.iterator();
    for (String argument = null; iter.hasNext(); argument = (String)iter.next()) {
      if (argument.startsWith("-D")) {
        if (argument.length() < 3) {
          int idx = arglist.indexOf(argument);
          throw new IllegalArgumentException("Argument" + idx
                                             + " is not a legal property argument.");
        }
        int valueIdx = argument.indexOf("=");
        System.setProperty(argument.substring(2, valueIdx),
                           argument.substring(valueIdx + 1));
        assert (System.getProperty(argument.substring(2, valueIdx)).equals(argument
                                                                           .substring(valueIdx
                                                                                      + 1)));
      }
    }
  }
  /** 
   * __UNDOCUMENTED__
   *
   * @param args __UNDOCUMENTED__
   *
   * @throws IllegalArgumentException __UNDOCUMENTED__
   */
  protected static void helperParseArgs2(final String[] args) {
    assert (args != null);
    assert (!Arrays.asList(args)
                   .contains(null));
    // --
    List arglist = Arrays.asList(args);
    Iterator iter = arglist.iterator();
    for (String argument = null; iter.hasNext(); argument = (String)iter.next()) {
      if (argument.startsWith("-D")) {
        if (argument.length() < 3) {
          int idx = arglist.indexOf(argument);
          throw new IllegalArgumentException("Argument" + idx
                                             + " is not a legal property argument.");
        }
        int valueIdx = argument.indexOf("=");
        String key = argument.substring(2, valueIdx);
        String value = argument.substring(valueIdx + 1);
        System.setProperty(key, value);
        assert (System.getProperty(key).equals(value));
      }
    }
  }
}
/* ########## End of File ########## */





Enabling Assertions from the Command Line: -ea and -da enable and disable assertion in a package subtree or in a class.

 
java -ea MyApp
java -ea:... MyApp
java -ea:com.mycompany... MyApp
java -ea:com.mycompany... -da:com.mycompany.MyClass MyApp





Handling an Assertion Error

 
public class Main {
  public static void main(String[] argv) throws Exception {
    try {
      assert argv.length > 0;
    } catch (AssertionError e) {
      String message = e.getMessage();
      System.out.println(message);
    }
  }
}





Non-informative style of assert

 
//: c15:Assert1.java
// Non-informative style of assert
// Compile with: javac -source 1.4 Assert1.java
// {JVMArgs: -ea} // Must run with -ea
// {ThrowsException}
// From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002
// www.BruceEckel.ru. See copyright notice in CopyRight.txt.
public class Assert1 {
  public static void main(String[] args) {
    assert false;
  }
} ///:~





Using the class loader to enable assertions

 
// : c15:LoaderAssertions.java
//Using the class loader to enable assertions
//Compile with: javac -source 1.4 LoaderAssertions.java
//{ThrowsException}
//From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002
//www.BruceEckel.ru. See copyright notice in CopyRight.txt.
public class LoaderAssertions {
  public static void main(String[] args) {
    ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
    new Loaded().go();
  }
}
class Loaded {
  public void go() {
    assert false: "Loaded.go()";
  }
}
///:~