java - 无法理解java断言机制

标签 java assert

这个程序是 SCJP 问题书中的一个问题

class One {
    int x = 0;
    {
        assert x == 1;
    }
}

public class Two {
    public static void main(String[] args) {
        int y = 0;
        assert y == 0;
        if(args.length > 0)
            new One();
    }
}

以下哪项运行时不会出错? 给出的选项是

A. java Two
B. java Two x
C. java -ea Two
D. java -ea Two x
E. java -ea:One Two
F. java -ea:One Two x
G. java -ea:Two Two x

正确选项是A、B、C、E、G

D 和 F 不正确的原因是创建了 One 的实例。我不明白为什么创建 One 实例会出现问题。

在选项B和G中,也创建了One的实例,那么为什么对于D和F来说这是一个问题?

最佳答案

I don't understand why it would be a problem if an instance of One is created.

因为 One 包含一个 assert,在实例化时保证会失败(并且这些选项在 args 中传递); 0 != 1

class One {
    int x = 0;
    {
        assert x == 1;
    }
}

此外,在选项 B 中未启用断言,在选项 G 中断言仅在类 Two 中启用(有问题的断言是在 One 类中)。

关于java - 无法理解java断言机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30553794/

相关文章:

java - Selenium DoubleClick WebElement 导致错误

qt - QTreeView 中的 QModelIndexList 提供调试断言

c - 如何用assert实现C宏

c++ - 如何在没有运行时成本的情况下基于断言指导 GCC 优化?

javascript - 我可以在 typescript 中创建无法捕获的错误吗?

Java 网格布局

java - 如何使用调试器添加监视表达式功能在 Eclipse 中监视空指针?

Java/Android 重写方法

java - 使用 Jackson 反序列化枚举 Shape.OBJECT 失败

python - 记录脚本适用于 python2 和 python3 以及特定的 matplotlib