温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Assert断言怎么用

发布时间:2026-07-17 07:31:32 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 里,断言(Assert)主要用于开发和测试阶段做“内部逻辑检查”,不建议在生产环境做业务校验。下面从用法、开启方式、适用场景和注意事项给你一个完整说明。


一、基本语法

1️⃣ 基本形式

assert 布尔表达式;

示例:

int age = 18;
assert age >= 0;

如果 age < 0,程序会抛出:

AssertionError

2️⃣ 带提示信息的断言

assert 布尔表达式 : "错误信息";

示例:

int age = -1;
assert age >= 0 : "年龄不能为负数:" + age;

当断言失败时,错误信息会显示在 AssertionError 中。


二、如何开启断言(非常重要)

⚠️ Java 默认是关闭断言的,不开启不会生效。

1️⃣ 在运行时开启

使用 java 命令

java -ea MyApp

或:

java -enableassertions MyApp

只开启某个包或类

java -ea:com.example... MyApp

关闭断言

java -da MyApp

2️⃣ IDE 中开启断言

IntelliJ IDEA

  1. Run → Edit Configurations
  2. VM options 中添加:
-ea

三、使用示例

示例 1:方法参数校验(内部)

public int divide(int a, int b) {
    assert b != 0 : "除数不能为 0";
    return a / b;
}

✅ 适合你确信调用方不会传错参数的情况


示例 2:程序内部状态检查

public void process(int status) {
    status = update(status);
    assert status == 1 || status == 2 : "非法状态:" + status;
}

四、断言 vs 异常(重点)

场景 推荐方式
程序内部逻辑错误 ✅ assert
用户输入错误 ❌ assert
业务校验 ❌ assert
可控异常处理 ✅ if + 异常
生产环境校验 ✅ IllegalArgumentException 等

❌ 错误示例(不要用断言做业务校验)

public void setAge(int age) {
    assert age >= 0;
    this.age = age;
}

如果断言没开启,这行代码直接失效。

✅ 正确写法:

public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("年龄不能为负数");
    }
    this.age = age;
}

五、assert 的本质

  • 关键字:assert
  • 失败抛出:java.lang.AssertionError
  • 不能捕获用于正常业务逻辑
  • 编译后仍然存在,但运行时是否生效取决于 JVM 参数

六、什么时候该用断言(总结)

✅ 适合用断言:

  • 判断“永远不应该发生”的情况
  • 调试、测试阶段
  • 内部不变式(invariant)检查
  • 前置条件/后置条件(仅限内部)

❌ 不适合用断言:

  • 用户输入校验
  • 业务规则判断
  • 生产环境必须生效的逻辑

七、一句话记忆

断言是给程序员看的,不是给用户看的。

如果你愿意,我也可以帮你对比 JUnit 的 assert 和 Java 原生 assert 的区别,或者给你一个实际项目中的使用建议。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手