我是靠谱客的博主 诚心冥王星,最近开发中收集的这篇文章主要介绍Java学习:assert(断言)的使用——测试程序和AssertionError错误事件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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(断言)的使用——测试程序和AssertionError错误事件的全部内容,希望文章能够帮你解决Java学习:assert(断言)的使用——测试程序和AssertionError错误事件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部