Java中的assert用法

转载 2004年07月17日 15:42:00
assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使用assert。在1.4中添加了assert关键字和java.lang.AssertError类的支持。

      首先,我们有必要从一个例子说起assert

public class AssertTest
{
 public static void main(String[] args)
 {
  AssertTest at = new AssertTest();
  at.assertMe(true);
  at.assertMe(false);
   
 } 
 
 private  void assertMe(boolean boo)
 {
  assert boo?true:false; 
  System.out.println("true condition");
 }
 
}
程序中包含了assert的话,你要用javac -source 1.4 xxx.java来编译,否则编译器会报错的。要想让assert得部分运行的话,要使用java -ea xxx来运行,否则包含assert得行会被忽略。下面我们运行
javac -source 1.4 AssertTest.java
java -ea AssertTest
看看结果的输出是:
true condition
Exception in thread "main" java.lang.AssertionError
        at AssertTest.assertMe(AssertTest.java:13)
        at AssertTest.main(AssertTest.java:7)
当我们运行at.assertMe(true)得时候,由于assert boo?true:false相当于 assert true;因此没有任何问题,程序往下执行打印出true condition,但是执行at.assertMe(false)的时候相当于assert false,这个时候解释器就会抛出AssertionError了,程序就终止了。大家必须清楚AssertionError是继承自Error得,因此你可以不再程序中catch它的,当然你也可以在程序中catch它然后程序可以继续执行。例如:
public class AssertTest
{
 public static void main(String[] args)
 {
  AssertTest at = new AssertTest();
  try
  {
   at.assertMe(true);
   at.assertMe(false);
  }
  catch(AssertionError ae)
  {
   System.out.println("AsseriontError catched"); 
  }
  System.out.println("go on");
   
 } 
 
 private  void assertMe(boolean boo)
 {
  assert boo?true:false; 
  System.out.println("true condition");
 }
 
}

      assert还有另外一种表达的方式,就是assert exp1:exp2;其中exp1是个boolean返回值得表达式,而exp2可以是原始的数据类型或者对象都可以例如:
   boolean boo = true;
   String str = null;
    assert boo = false:str="error";
我们刚开始讲得assert exp1得形式,当exp1是false得时候,AssertionError得默认构造器会被调用,但是assert exp1:exp2这样的形式,当exp1为true的时候后面exp2被或略,如果false的话,后面的表达式的结果会被计算出来并作为AssertionError得构造器参数。看下面的例子:
public class AssertTest
{
 public static void main(String[] args)
 {
  AssertTest at = new AssertTest();
  at.assertMe(true);
  at.assertMe(false);
   
 } 
 
 private  void assertMe(boolean boo)
 {
  String s = null;
  assert boo?true:false:s = "hello world"; 
  System.out.println("true condition");
 }
 
}运行的时候会得到这样的结果
true condition
Exception in thread "main" java.lang.AssertionError: hello world
        at AssertTest.assertMe(AssertTest.java:14)
        at AssertTest.main(AssertTest.java:7)
Assert最好不要滥用,原因是assert并不一定都是enable的,下面两种情况就不应该用assert

  1. 不要再public的方法里面检查参数是不是为null之类的操作
    例如public int get(String s)
       {
           assert s != null;
       }
    如果需要检查也最好通过if s = null 抛出NullPointerException来检查
  2. 不要用assert来检查方法操作的返回值来判断方法操作的结果   
    例如 assert list.removeAll();这样看起来好像没有问题 但是想想如果assert 被disable呢,那样他就不会被执行了 所以removeAll()操作就没有被执行  可以这样代替
    boolean boo = list.removeAl();
    assert boo;

理解和正确使用Java中的断言(assert)

一、语法形式:     Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion),它的 语法形式有如下所示的两种形式: 1、assert co...
  • u010142437
  • u010142437
  • 2016年05月12日 22:14
  • 5952

java中Assert的用法

assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使...
  • u014470581
  • u014470581
  • 2016年09月07日 15:41
  • 3075

java的assert关键字的用法

Java陷阱之assert关键字   一、概述   在C和C++语言中都有assert关键,表示断言。 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。   二、语法   在J...
  • LiuShuXiaDeRiLuo
  • LiuShuXiaDeRiLuo
  • 2017年01月22日 14:51
  • 473

理解和正确使用Java中的断言(assert)

理解和正确使用Java中的断言(assert) 一、语法形式: Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion),它的 语法形...
  • wangnanwlw
  • wangnanwlw
  • 2016年08月18日 15:15
  • 1345

python学习笔记2.4-数据结构之列表和元组

python语言中包含的数据结构比较简单,除了简单的变量以外,还有列表(元组)、字典、集合。对于数据结构的操作一般包含四种:增、删、查、改。本文主要介绍列表(list)(包括元组tuple)的操作。 ...
  • jinxiaonian11
  • jinxiaonian11
  • 2016年11月03日 14:47
  • 21097

assert()函数用法总结

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( int expression );   assert的作用是现计算...
  • qq_32175379
  • qq_32175379
  • 2017年04月21日 11:05
  • 815

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

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

调试时的Assert用法

c++中断言assert使用的简要说明
  • jiang111_111shan
  • jiang111_111shan
  • 2017年04月15日 18:59
  • 498

java中assert关键字

Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion)。,它的语法形式有如下所示的两种形式: 1、assert condition;     这里...
  • onlyyjco
  • onlyyjco
  • 2016年08月29日 12:14
  • 1075

java中的新增的assert断言方法

java语言在发展的时候,对于调试员来说,调试工作是很累人的,但是java里的发展却在一定程度上方便了他们,现在就有一个断言的功能,就是说,可以使用assert关键字来判断一个boolean的属性,到...
  • wangjianbing1998
  • wangjianbing1998
  • 2016年11月08日 20:41
  • 3026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的assert用法
举报原因:
原因补充:

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