查看: 1460|回复: 1

[Java学习] Java断言

发表于 2018-7-3 14:52:38
断言的概念
断言用于证明和测试程序的假设,比如“这里的值大于 5”。
断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。
断言的使用
断言有两种方法:
· 一种是 assert<<布尔表达式>> ;
· 另一种是 assert<<布尔表达式>> :<<细节描述>>。
如果布尔表达式的值为false , 将抛出AssertionError 异常; 细节描述是AssertionError异常的描述文本使用 javac –source 1.4 MyClass.java 的方式进行编译示例如下:
public class AssertExample {
    public static void main(String[] args) {
        int x = 10;
        if (args.length > 0) {
            try {
                x = Integer.parseInt(args[0]);
            } catch (NumberFormatException nfe) {
                /* Ignore */
            }
        }
        System.out.println("Testing assertion that x == 10");
        assert x == 10 : "Our assertion failed";
        System.out.println("Test passed");
    }
}
由于引入了一个新的关键字,所以在编译的时候就需要增加额外的参数,要编译成功,必须使用 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类名
参考资料:http://www.makeru.com.cn/
java学习交流群:587131012

点评

海!外直播 t.cn/RxmJTRo 禁闻视频 t.cn/RxlbueK 一司机说:这几天在琢磨,开着政府检验合格的车,烧着政府说达标的油,贴著政府发排放合格绿标,政府却说空气质量差是汽车尾气造成,我就纳闷,难道是我们踩油门的姿势不对   发表于 2018-7-3 20:42


回复

使用道具 举报