DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

Java assert关键字的使用方法


assert后面的表达式为假时会抛出AssertionError类对象,此类继承自Throwable类,可以用try..catch(AssertionError e)...语句捕获并处理,如果不处理,将会向其他Exception一样向上层调用抛出,导致线程运行中断。

使用assert的方法

assert适用于定义服务器的能力边界,如最大负载等,不适于对外部条件(例如检验用户输入格式)进行判断(参考http://stackoverflow.com/questions/1276308/exception-vs-assertion),因为处理这类问题的方法是给出一个反馈信息,而不是中断服务。基于此,应用开发初期可以用assert将流程运行的前提条件写出来,但在产品发布前应将这些临时assert改成正式的错误处理语句。

JUnit的assert*提供了比内置assert更丰富的判断方法,但本质上仍然是抛出AssertionError,且增加了对JUnit的依赖,因此不建议用JUnit代替assert。

(2012-12-19更新)


Java的assert关键字是从JAVA SE 1.4 引入的,为了和老版本兼容,Java在执行的时候默认是不启动断言检查的,这种情况下所有的assert语句都将被忽略。要开启断言检查,则需要在运行时加参数-enableassertions或-ea来开启,在Eclipse中,就是在要运行的类(或测试方法)的Run Configurations中的“Arguments”下的“VM arguments”部分写上:“-ea”。为了避免由于忘记加这个开关造成assert失效导致错误的测试结果,建议不要使用java的assert,而使用JUnit的org.junit.Assert.assertTrue(expr)方法。

assert关键字的两种用法:

  1. assert

如果为true,则程序继续执行。

如果为false,则抛出 java.lang.AssertionError;

  1. assert : <提示信息> (boolean表达式和提示信息之间用冒号分隔)

如果为true,则程序继续执行。

如果为false,则抛出java.lang.AssertionError,并输出提示信息。

另外assert后面可以指定对哪些类断言生效,详见深入解析Java的新特性assertion。



Published

Jul 18, 2011

Last Updated

Jul 18, 2011

Category

Tech

Tags

  • assert 1
  • Java 106

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor