【Java 教程】JAVA的断言 - Assert

简介

断言是使用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,没有任何错误信息提示

为什么使用断言

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

注意事项

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

在哪里使用断言

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

哪里不使用断言

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

小结

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

作者:河西
链接:https://juejin.im/post/5e0eaa0de51d4540e47ca159

服务推荐

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值