关于JDK1.4增加的assert语句

原创 2004年08月25日 23:47:00

关于JDK1.4增加的assert语句

1.         assert语句的语法

JDK1.4增加了assert语句,它的语法如下:

assert  assumption 或者

assert  assumption : error message or error code

assumption 应该是一个布尔值。(或者是条件表达式,反正最终的结果为truefalse 。)

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       如果assumptiontrue,那么一切如常,这个语句就像没有出现一样,如果assumptionfalse,那么程序将扔出一个java.lang.AssertionError 。如果在代码里采用了第二种带error message或者error code的写法的话,该error message或者error code将跟随java.lang.AssertionError一起显示出来。

 

2.         assert语句的代码的编译

如果你在代码中使用了assert语句,那么你使用javac编译时应该像这样:

javac –source 1.4 **.java

否则的话,assert关键字将不被视为关键字。(这是因为assert语句是从JDK1.4

才有的。)

当然,如果你使用JDK1.4及以上编译时,不用-source 1.4参数的话会出现warning

3.         运行时启动assert

缺省情况下assert是不被启用的。

运行时应该这样启用assert

java –ea:类名  类名

或者

java –ea:包名类名

相应的用-da关闭assert

(详细可以参考java命令的帮组)。

4.         assert的好处及使用。

我以为assert主要用来debug 。使用它能很容易定位错误。另外,在代码的适当地方用上assert语句,能够在代码中某些值的取值范围发生变化时迅速的定位代码错误,发现代码的bug 。请看下面这个例子。

 

假设i现在的取值就是0 1

那么我们可以这么写代码:

if  (0 == i) {

….
} else { //i == 1

}

i的值的范围发生了变化(这是完全有可能的,因为这个i的值可能是其它模块给本模块传的参数。),这个代码就很有可能有潜在的bug,而且这个bug未必能立即表现出来。即使表现出来了,要定位到这个错也不容易。因为你很可能仍然坚信i的值就是0或者1

 

但是如果将以上代码改写成这样:

if  (0 == i) {

….
} else { //i == 1

              assert  i==1:”The i value isn’t 0 or 1 .”

              ….

}

那么一旦i的取值范围超过了0,1 ,那么立即会扔出一个带有错误信息的java.lang.AssertionError 。这样对错误的定位就一目了然了。

5.         最后写一个运行的例子:

public class TestAssert {

       public static void main(String[] args) throws Exception {

              int i=100;

             

              String errorMsg = "This is a error";

              int errorCode = 10000;

             

              assert i>200:errorCode;

             

              assert i>200:errorMsg;

       }

}

 

然后编译:

javac –source 1.4   TestAssert.java

然后运行:

java –ea:TestAssert  TestAssert

 

运行结果如下:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />  

Python assert断言异常语句格式及用法

http://www.iplaypython.com/jinjie/assert.html 使用assert断言是学习python一个非常好的习惯,assert断言句语格式及用法...
  • SalmonellaVaccine
  • SalmonellaVaccine
  • 2014年05月12日 13:34
  • 2286

assert的用法以及与条件语句的比较

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include assert.h> void assert( int expression ); ...
  • o7_yue
  • o7_yue
  • 2015年04月21日 23:29
  • 738

Python中何时使用断言 assert

本文转自:http://blog.jobbole.com/76285/ 这个问题是如何在一些场景下使用断言表达式,通常会有人误用它,所以我决定写一篇文章来说明何时使用断言,什么时候不用。 ...
  • shujuanyaning
  • shujuanyaning
  • 2015年08月01日 11:03
  • 6296

C++ Assert()断言机制原理以及使用

MSDN原文如是说:
  • makenothing
  • makenothing
  • 2014年04月12日 21:28
  • 18598

JDK1.4创建多线程的几种方法

import java.util.concurrent.TimeUnit; class InnerThread1 { private int countDown = 5; privat...
  • wwww_com
  • wwww_com
  • 2017年02月13日 14:36
  • 271

Lua中assert( )函数的使用

当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加;调用一个非函数的变量;访问表中不存在的值等。你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息。 ass...
  • lzj849736336
  • lzj849736336
  • 2016年07月05日 19:38
  • 10697

assert(0)的作用

今天在看框架例子的代码里,发现很多地方没有做什么,就只是错误检查,然后后面就会跟一个assert(0),比较奇怪这个用意,所以特意差了一下记录在这里。定义assert宏的原型定义在#include ...
  • xiaodoubao124
  • xiaodoubao124
  • 2015年07月08日 15:46
  • 1129

assert预处理宏总结

1、除了assert预处理宏之外,现代C++程序很少再使用预处理宏了;2、功能: 测试一个条件并可能使程序终止,用法是:assert(expr),assert的作用是先计算表达式expr,如果其值为假...
  • JIEJINQUANIL
  • JIEJINQUANIL
  • 2016年03月28日 20:48
  • 1083

c++ assert 的用法和注意事项

c++  assert 的用法和注意事项                      分类:             C/C++      2013-01-31 12:13     ...
  • yangbo_cuit
  • yangbo_cuit
  • 2015年03月20日 16:29
  • 590

lua中assert的作用

在看《Lua游戏开发实践指南》时,在P34中有说明assert,但是说明特少,导致自己完全不懂所以然,因此自己研究了一下。 百度百科的解释: Assert(断言)编写代码时,我...
  • suyinfan
  • suyinfan
  • 2017年01月04日 20:00
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于JDK1.4增加的assert语句
举报原因:
原因补充:

(最多只允许输入30个字)