【问题标题】:Who throws AssertionError in JAVA? JVM or by API developer/Programmer?谁在 JAVA 中抛出 AssertionError? JVM 还是 API 开发人员/程序员?
【发布时间】:2020-09-14 00:47:28
【问题描述】:

我学习了JAVA中的异常处理,发现异常/错误也可以根据抛出者或引发者来分类。

  1. JVM 引发的异常

  2. API 开发人员/程序员引发的异常

我的问题是谁负责提出AssertionError

【问题讨论】:

  • 欢迎来到 Stack Overflow。看看网站上已经存在的 Q/As。例如Avoiding != null statements 是关于使用AssertionError - 我认为您可以自己回答您的问题。
  • 请注意,您的问题也可能更适合Software Engineering 堆栈交换。例如,您会在那里找到When to use assertions and when to use exceptions?。那里有大量信息,只需搜索它 – 否则请明确为什么现有的 Q/A 不能回答您的问题 – 并确保提出非常具体的问题(尚未提出)问题。
  • 归根结底是程序员。她经常通过assert s.length() == expectedLengh; 之类的东西间接地做到这一点,只有在启用断言时才会抛出。她也可以直接做:throw new AssertionError("This can’t happen");.

标签: java exception jvm assertion


【解决方案1】:

责任在于程序员,无论他们是否使用,例如

throw new AssertionError("unreachable code");

assert condition;

请注意,assert 语句被称为“语法糖”。

当你写作时

class ClassWithAssert {
    public ClassWithAssert() {
        assert toString() != null;
    }
}

它被编译成相当于

class ClassWithAssert {
    static final boolean $assertionsDisabled
        = !ClassWithAssert.class.desiredAssertionStatus();
    public ClassWithAssert() {
        if(!$assertionsDisabled && toString() == null)
            throw new AssertionError();
    }
}

所以从技术上讲,隐式抛出与显式抛出没有什么不同。

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多