zoukankan      html  css  js  c++  java
  • Java知多少(54)断言详解

    断言的概念

    断言用于证明和测试程序的假设,比如“这里的值大于 5”。
    断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。

    断言的使用

    断言有两种方法:
    • 一种是 assert<<布尔表达式>> ;
    • 另一种是 assert<<布尔表达式>> :<<细节描述>>。
    如果布尔表达式的值为false , 将抛出AssertionError 异常; 细节描述是AssertionError异常的描述文本使用 javac –source 1.4 MyClass.java 的方式进行编译示例如下:
     1 public class AssertExample {
     2     public static void main(String[] args) {
     3         int x = 10;
     4         if (args.length > 0) {
     5             try {
     6                 x = Integer.parseInt(args[0]);
     7             } catch (NumberFormatException nfe) {
     8                 /* Ignore */
     9             }
    10         }
    11         System.out.println("Testing assertion that x == 10");
    12         assert x == 10 : "Our assertion failed";
    13         System.out.println("Test passed");
    14     }
    15 }

    由于引入了一个新的关键字,所以在编译的时候就需要增加额外的参数,要编译成功,必须使用 JDK1.4 的 javac 并加上参数'-source 1.4',例如可以使用以下的命令编译上面的代码:

        javac -source 1.4 AssertExample.java
    以上程序运行使用断言功能也需要使用额外的参数(并且需要一个数字的命令行参数),例如:
        java -ea AssertExample 1
    程序的输出为:
    Testing assertion that x == 10
    Exception in thread "main" java.lang.AssertionError:Our assertion failed
    at AssertExample.main(AssertExample.java:20)

    由于输入的参数不等于 10,因此断言功能使得程序运行时抛出断言错误,注意是错误, 这意味着程序发生严重错误并且将强制退出。断言使用 boolean 值,如果其值不为 true 则 抛出 AssertionError 并终止程序的运行。

    断言推荐使用方法

    用于验证方法中的内部逻辑,包括:
    • 内在不变式
    • 控制流程不变式
    • 后置条件和类不变式
    注意:不推荐用于公有方法内的前置条件的检查。

    运行时屏蔽断言

    运行时要屏蔽断言,可以用如下方法:
        java –disableassertions 或 java –da 类名
    运行时要允许断言,可以用如下方法:
        java –enableassertions 或 java –ea类名
  • 相关阅读:
    Windows光标形状
    函数对象(仿函数 functor)
    构造函数的初始化列表抛出异常
    <<Windows via C/C++>>学习笔记 —— 线程优先级【转】
    单例模式
    c++中的重载(Overload)、覆盖(重写,Override) 、隐藏与访问权限控制及using声明
    RTTI: dynamic_cast typeid
    抽象类 虚函数 声明与实现
    typedef 函数指针 数组 std::function
    Client Window坐标 RECT相关函数
  • 原文地址:https://www.cnblogs.com/Coda/p/4483482.html
Copyright © 2011-2022 走看看