请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 5606|回复: 7

assert关键字的用法示例

[复制链接]
发表于 2008-6-26 22:40:09 | 显示全部楼层 |阅读模式
JDK1.4新增了assert关键字
assert的两个基本用法如下:
assert logicExp;
asert logicExp : expr;
第一个直接进行断言,
第二个也是进行断言,但当断言失败失败时显示特定信息。
下面是示例程序:
  1. public class TestAssert
  2. {
  3. public static void main(String[] args)
  4. {
  5. int a = 5;
  6. assert a > 3;
  7. assert a < 3 : "a不小于3,且a的值为:" + a;
  8. }
  9. }
复制代码
最后要指出:
虽然assert是JDK1.4新增的关键字,但至今很少人使用。
因为很多人写测试时要么用JUnit,要么直接System.out.println(...);
另外有一点非常重要:
java命令默认不启动断言,
为了启动用户断言,应该在运行java命令时增加-ea(Enable Assert)选项。
为了启动系统断言,应该在运行java命令时增加-esa(Enable System Assert)选项。

运行上面程序,将看到如下图所示效果
11.jpg

评分

1

查看全部评分

发表于 2008-6-26 22:52:15 | 显示全部楼层
还是打印出来方便哦
发表于 2008-6-26 23:06:05 | 显示全部楼层
看完版主的解释第一感觉就是这个关键字有点多余,那为什么还要增加这个关键字呢
 楼主| 发表于 2008-6-28 20:23:18 | 显示全部楼层
这个关键字也不是绝对多余,
对于规范化测试还是有一定用处的,
比如我们用System.out.println()之后一定要删除——
但用assert之后就无需删除,因为Java默认不启用该关键字。

严格地说,这个关键字并不是十分必需,有一点可有可无,所以用的人不多。
发表于 2008-7-7 23:20:21 | 显示全部楼层
呵呵,很多时候,你的程序是不能让你DEBUG的,这时候你可能会想着把信息print出来,但是这样做问题就来了,当你不需要print出来的时候怎么办?假如你的代码里面写了几百行这样的语句,是否一个个去删除呢?
    assert可以很好帮你做这件事,你在调试的时候加上-ea参数,正式用的时候就不用-ea参数,那些东西就不出来了。
    当然,有另外一种方法也能够解决这问题,就是使用logging组件,比如log4j(你需要为此配置N个Logger在一个类里面),需要在调试的时候输出的信息在一个Logger里面,日常跟踪信息放到另外一个Logger里面,这样做同样有缺点——你的代码会有很多的Logger输出,虽然信息不需要输出,但是它同样需要占用不小的资源。
发表于 2008-11-9 23:11:20 | 显示全部楼层
原帖由 kongyeeku 于 2008-6-26 22:40 发表
JDK1.4新增了assert关键字
assert的两个基本用法如下:
assert logicExp;
asert logicExp : expr;
第一个直接进行断言,
第二个也是进行断言,但当断言失败失败时显示特定信息。
下面是示例程序:public class TestAssert
{
...


不过,我看李老师的如下代码中,好象也用了不少assert logicExp语句啊

  1. public class ExamServiceTest extends AbstractTransactionalDataSourceSpringContextTests
  2. {
  3. ExamService examService;
  4. public String[] getConfigLocations()
  5. {
  6.   String[] configLocations = {"daoContext.xml","appContext.xml"};
  7.   return configLocations;
  8. }


  9. public void onSetUpInTransaction()
  10. {
  11.   examService = (ExamService)applicationContext.getBean("examService");
  12. }

  13. public void onTearDownInTransaction()
  14. {
  15.   examService = null;
  16.     }
  17. public void testListStudent()throws Exception
  18. {
  19.   List<Student> studentList = examService.listStudent(2);
  20.   for (Student s : studentList)
  21.   {
  22.    System.out.println(s.getName());
  23.   }
  24.   assertEquals(1 ,1);
  25. }
  26. public void testListQuestion()throws Exception
  27. {
  28.   List<Question> questionList = examService.listQuestion(3);
  29.   for (Question q : questionList)
  30.   {
  31.    System.out.println(q.getQuTitle());
  32.   }
  33.   assertEquals(1 , 1);
  34. }
  35. public void testGetNextQuestion()throws Exception
  36. {
  37.   System.out.println("获取的下一题为:" + examService.getNextQuestion(null , 1).getQuTitle());
  38.   assertEquals(1 , 2);
  39. }
  40.     public static void main(String[] args)
  41. {
  42.   TestRunner.run(ExamServiceTest.class);
  43.     }
复制代码
发表于 2012-4-20 23:11:12 | 显示全部楼层
顶顶顶顶
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2020-4-8 00:32 , Processed in 0.498403 second(s), 11 queries , File On.

快速回复 返回顶部 返回列表