java基础知识--断言

                    断言

  在网上找了很多关于断言的博客知识点总结,加上java核心技术书籍上内容,整理出这篇学习博客

  这篇博客讲的很详细,见http://blog.csdn.net/silentbalanceyh/article/details/4564884内容

1、断言的概念

断言机制允许在测试期间向代码中插入一些检査语句 。 当代码发布时, 这些插人的检测语句将会被自动地移走。

    assertion(断言)Java1.4引入的一个新特性,该特性的引入的目的是为了辅助开发人员调试测试,是一种比较常用的调试、测试方案。

  assertion在软件开发过程中是一种比较常用的调试方法;不仅仅如此,使用assertion可以在开发过程中证明程序的正确性,只是这种用法会对系统的整体设计存在很大的挑战

  ,而且目前很少投入到实用里面,所以一般情况下使用assertion的目的是为了调试和测试

  Java 语言引人了关键字 assert 。

  这个关键字有两种形式 :

    assert  条件 ;

    assert  条件 : 表达式 ; 

    这两种形式都会对条件进行检测 , 如果结果为 false , 则抛出一个 AssertionError 异常。

    ·在第二种形式中, 表达式将被传人 AssertionError 的构造器 , 并转换成一个消息字符串。

  示例:

 1 /**
 2  *断言使用的概念说明代码
 3  **/
 4 public class AssertionDriver {
 5     public static void main(String args[]){
 6         Employee employee = new Employee();
 7         employee.setName("Tian lang");
 8         employee.setEmail("2433758932@qq.com");
 9         businessProcess(employee);
10     }
11     
12     public static void businessProcess(Employee employee){
13         try{
14             assert employee.getName() != null && 
15                 employee.getEmail() != null && 
16                 employee.getPassword() != null:
17                     employee;
18         }catch(AssertionError error){
19             System.out.println(error);
20         }
21     }
22 }
23 
24 class Employee{
25     private String name;
26     private String email;
27     private String password;
28     public String getName() {
29         return name;
30     }
31     public void setName(String name) {
32         this.name = name;
33     }
34     public String getEmail() {
35         return email;
36     }
37     public void setEmail(String email) {
38         this.email = email;
39     }
40     public String getPassword() {
41         return password;
42     }
43     public void setPassword(String password) {
44         this.password = password;
45     }
46     @Override
47     public String toString(){
48         return "/nName:" + name + "/n" + "Email:" + email + "/n" + "Password:" + password;
49     }
50 }

  上边代码段使用了第二种表达式的方式,但是这里复杂的地方在于表达式2不是一个字符串,而是定义的Employee类的一个对象的实例,也就是说这里表达式2是一个Object实例,然后编译该代码,运行的时候打开断言,就可以得到下边的输出: 

java.lang.AssertionError: 
Name:Tian lang
Email:2433758932@qq.com
Password:null

2、在eclipse中如何使用断言

  (一)首先明确:

     java断言Assert是jdk1.4引入的。

  jvm 断言默认是关闭的。

  断言只适用于复杂的调试过程。

  断言一般用于程序执行结果的判断,千万不要让断言处理业务流程。

(二)判断eclipse是否开启了断言,

    代码如下:

1 public class AssertTest {
2 
3 public static void main(String[] args) {
4 boolean isOpen = false; 
5 assert isOpen=true; //如果开启了断言,会将isOpen的值改为true
6 System.out.println(isOpen);//打印是否开启了断言 
7 }
8 }

执行上面代码,如果打印 true说明已经启用了断言,如果为 false 则没有启用断言。
如果没有启用断言,则按按照下面方法开启断言。

(三)eclipse中开启断言选择菜单:

    Run ---> Run Configurations...---> 选择 Arguments 选项卡
    在 VM arguments 文本框中输入: -ea 注意:中间没有空格,如果输入 -da 表示禁止断言。

      然后关闭该窗口,然后保存就开启了断言。

3、关于断言的思考  

  Java断言机制的出现,其主要目的是为了辅助程序员开发中的调试、测试、开发等操作,既然如此,在正规的业务流程中不能滥用,用不好有可能导致很严重的问题,有三点需要说明:
 
  【1】请开发人员牢记,断言默认是关闭的,所有主流的IDE包括Eclipse和NetBeans在调试代码过程都没有将断言打开,如果要打开断言,需要进行相关的设置,所以有时候
    加入了assert在代码里面了过后,在寻找系统关键环节的时候,必须记得打开断言功能。
 
  【2】不可以使用断言去替代正常的业务逻辑:这种情况对比地说就是assert和if语句,这两者在程序开发过程中有着本质性的概念差异。if最典型的解释就是,条件满足就执行,
    条件不满足就不用执行;而assert一般放在系统的关键位置,assert是确保条件表达式是正确的,如果不正确表示系统有Error,所以二者在概念上有本质的差别,所以开发人员必
    须记得不能使用assert去替代本来的if语句。而且有一点,在发布最终代码版本的时候,断言一般会关闭的,如果使用了这样的替代方式,就意味着未发布版本和发布版本的流程
    不一样使得在工业生产中。
 
  【3】assert的出现,意味着如果系统在此处出现AssertionError的话证明系统已经出现了不可恢复的错误,所以assert是不能用于正规的业务逻辑的,只能用于开发和调试,这种不可
    恢复错误在工业生产和工程项目里面有可能导致严重的问题,所以这种情况一定要仔细考虑assert的使用和位置。

  补充,具体断言可以查看开头目录中的博客,更为详细具体!

posted @ 2017-09-25 16:52  huster-stl  阅读(400)  评论(0编辑  收藏  举报