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;

深度卷积神经网络及其在语音中的基本用法

-
  • 1970年01月01日 08:00

java的assert关键字的用法

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

java中Assert的用法

assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使...
  • jicheng687
  • jicheng687
  • 2009-09-29 15:00:00
  • 710

自动化测试基础-断言(Assert)使用方法

junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类。 1.assertTrue/False([String message,]boolean con...
  • boer521314
  • boer521314
  • 2014-10-23 17:12:26
  • 6096

java assert断言的用法

assert关键字是在JDK1.4才被添加,用于程序的调试。用户有两种 1.assert expression expression是逻辑运算表达式,如果expression为true,表示断言成功,...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-03-07 10:55:25
  • 7210

verify和assert验证

public class AssertTest extends SeleneseTestCase {@Beforepublic void setUp() throws Exception {selen...
  • smile_juan
  • smile_juan
  • 2011-01-14 15:44:00
  • 5205

spring的断言工具类Assert的基本使用

这几天比较闲看了下以前的项目,发现了这个spring下的Assert方法,(以前用过,不过好像忘的差不多了*.*) org.springframework.util.Assert; Assert断...
  • qq_33376750
  • qq_33376750
  • 2017-03-23 10:56:08
  • 3880

Java Assert 用法简介

    在JDK1.4中增加了Assert的新功能,用于开始、调试时期的错误检测,它可以通过-ea 的JVM参数关闭,关闭以后对程序的性能没有任何影响。     最好的教程 请见:http://ja...
  • yangqillohe
  • yangqillohe
  • 2010-06-05 10:28:00
  • 6858

JAVA学习笔记_Junit测试简单使用_assertEquals

一开始,是通过输出结果判断输出结果是否正确来判断,console虽然输出是true,false 和预期的是一样,但是junit显示都是成功的,并没有出现报错,达不到使用junit测试的效果。juni...
  • icecoola_
  • icecoola_
  • 2017-08-20 01:36:11
  • 2780

junit中 assertEquals与assertSame用法的区别

JUnit中assertEquals和assertSame方法的不同 1)提供的接口数量不完全相同。 assertEquals支持boolean,long,int等等java prim...
  • woailishan
  • woailishan
  • 2013-12-06 21:56:39
  • 4857
收藏助手
不良信息举报
您举报文章:Java中的assert用法
举报原因:
原因补充:

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