• 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的使用和位置。

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

    千里路我只陪你一程,从此艳阳风雪我不问!
  • 相关阅读:
    Unity3D性能优化之资源导入标准和属性设置篇
    博客主题-Next风格
    Pytorch 搭建 LeNet-5 网络
    CIFAR数据集解读
    Mnist数据集解读
    博客主题——cnbook
    博客主题——element v2
    更换清华镜像源
    图像插值技术——双线性插值法
    PASCAL VOC2012数据集解读
  • 原文地址:https://www.cnblogs.com/huststl/p/7592687.html
Copyright © 2020-2023  润新知