JAVA的断言 – Assert

JAVA的断言 – Assert断言是使用Java中的 assert 语句实现的。 在执行断言时,它被认为是正确的。 如果失败,JVM会抛出一个名为 AssertionError 的错误。 它主要用于开发过程中的测试目的。 可以看到 assert 语句并没有起作用,这是因为Java在执行程序的时候默认是不启动…

简介

断言是使用Java中的 assert 语句实现的。 在执行断言时,它被认为是正确的。 如果失败,JVM会抛出一个名为 AssertionError 的错误。 它主要用于开发过程中的测试目的。

assert 语句与布尔表达式一起使用,可以用两种不同的方式编写:

assert expression;
assert expression : errorMessage;

示例

public class AssertTest {
    public static void main(String[] args) {
    
        int value = 15;
        assert value >= 20 : "Underweight";
        System.out.println("value is " + value);
    }
}

输出:

value is 15

可以看到 assert 语句并没有起作用,这是因为Java在执行程序的时候默认是不启动断言检查的,即所有的断言语句都将被忽略。

如果要开启断言检查,则需要使用 -enableassertions-ea JVM参数来开启;如果要手动忽略断言检查,则可以通过使用 -disableassertions-da JVM参数来忽略断言语句。

执行命令 java -ea AssertTest 开启断言后的输出:

Exception in thread "main" java.lang.AssertionError: Underweight
	at AssertTest.main(AssertTest.java:11)

使用第一种无错误信息提示的语法编写:

public class AssertTest {
    public static void main(String[] args) {

        int value = 15;
        assert value >= 20;
        System.out.println("value is " + value);
    }
}

输出:

Exception in thread "main" java.lang.AssertionError
	at AssertTest.main(AssertTest.java:11)

可以看到这里仅是抛出了 AssertionError,没有任何错误信息提示

为什么使用断言

  1. 确保看起来无法到达的代码实际上是无法到达的
  2. 确保假设是正确的
  3. 确保 switch case 语句的 default 分支无法到达
  4. 检查对象的状态
  5. 在方法的开始检验
  6. 在方法调用后检验

注意事项

断言主要用于检查逻辑上不可能的情况。例如,它们可用于检查代码在开始运行之前期望的状态或在代码结束运行之后的状态。与普通的异常/错误处理不同,断言通常在运行时被禁用。

在哪里使用断言

  1. 私有方法的参数。私有参数仅由开发人员的代码提供,开发人员可能希望检查其关于参数的假设
  2. 分支条件,例如 switch case 语句
  3. 方法开头的条件

哪里不使用断言

  1. 断言不应用于替换错误/异常消息
  2. 断言不应用于 public 方法中的参数,因为它们可能由用户提供
  3. 断言不应在命令行参数上使用

小结

  1. 断言是一种调试方式,断言失败会抛出 AssertionError,只能在开发和测试阶段启用断言
  2. 对可恢复的错误不能使用断言,而应该抛出异常
  3. JAVA中断言很少被使用,更好的方法是编写单元测试


参考资料:

~~~~~~~~GeeksforGeeks – Assertions in Java

~~~~~~~~廖雪峰JAVA教程 – 使用断言

今天的文章JAVA的断言 – Assert分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/20599.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注