java中的断言

146 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

什么是断言

在 JDK1.4 中,断言作为一种新机制被引入,用于测试和调试我们的程序。本质上断言是在运行时执行的可编译实体,启用断言进行程序测试,可以大大减少在调试失败程序时花费的时间。

在Java中,你可以利用assert关键字来启用断言。断言在程序中执行时被假定为真,如果它是假的,程序会抛出一个断言错误AssertionError并终止 。

如何使用断言

断言assert后面是一个始终被认为是真的表达式,以及一个在评估为假时要显示的信息,用冒号:分隔。

    public static void main(String[] args) {
        Person p = new Person(30, "John Doe");
        int age = p.getAge();
        String name = p.getName();
        assert name != null : "Name = (null)";
        assert age >= 0 : "Age is negative.";
        System.out.println(name.toUpperCase() + " - " + age);
    }

第5、6行即为断言语句,可以理解为我们假设name不等于Null,我们期望这里的age应该是大于等于0.

-Enableassertions 选项以启用断言

必须指定 -enableassertions 选项才能启用断言。

如果在没有选项的情况下运行它,断言将被忽略。

在 Idea 中设置 -enableassertions / -ea

在 Idea 中,从 Run 菜单中的 Edit Configurations ... 打开 Run Options Settings 屏幕。

现在将 VM 选项设置设置为选项-enableassertions-ea以启用断言。

使用断言时的注意事项

断言不是错误处理

Assert不是“错误处理”,所以使用时要小心。

例如,考虑执行“打开文件”操作的情况。打开文件的操作可能会打开也可能不会打开,当然必须假设它。这不是通过断言“假设可以打开文件”之类的东西。

确保assert的有无不影响程序的处理

只有在启用断言时才会执行断言。尽可能有效地使用它进行调试。必须注意执行结果不会根据断言的存在或不存在而改变。

public class AssertTest1 {
  public static void main(String[] args) {    
    int n = 0;
    assert ++n > 0;
    System.out.println("n = " + n);
  }
}

在此代码中,n的最终值将根据断言是否启用而改变。在正常执行期间(禁用断言),n保持为0,启用断言时,n为1。

小心不要在断言启用和未启用时更改局部变量的值。

以上就是assert的含义和用法。