我已经写了以下代码:
class Cl
{
public static void main (String[] args) throws java.lang.Exception
{
assert true; //1
Bar.foo();
}
static class Bar{
public static void foo(){
boolean enabled = false;
assert enabled = true;
System.out.println("Asserts " +
(enabled ? "enabled" : "disabled"));
}
}
}
在类完成后执行的assert语句 当且仅当主机系统具有时,才启用初始化 确定词法包含断言的顶级类 语句启用断言。
我以为我在Cl
课程中通过断言true启用了断言,但它仍无法正常工作。如何启用关于JLS
所说的内容的断言?
答案 0 :(得分:5)
运行程序时,将 -ea 选项添加到java命令行
答案 1 :(得分:2)
像这样运行你的程序,
java -ea YourClass
-ea
表示启用断言,在运行之后,您的断言将在运行时执行,否则它只会跳转断言语句。
如果您使用 eclipse
,请转到“运行配置”并在-ea
和“运行”中写下VM Arguments
。
如果您尝试以编程方式启用断言,可以尝试此操作,
boolean enabled = false;
ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
assert enabled = true;
System.out.println("Asserts " +
(enabled ? "enabled" : "disabled"));
答案 2 :(得分:2)
其他答案解释了如何启用断言。 (请注意,您可以为所有类,给定包中的类或单个类启用或禁用它们。)
我只是想解释assert true;
实际上做了什么。
它不启用或禁用断言。这不是assert
声明“的意思”。实际上,在执行该语句时,为C1
启用或禁用断言为时已晚,也可能为Bar
启用或禁用断言。只有在初始化类之前,才能为类启用或禁用断言。对于任何给定的类,这种情况(最多)发生一次。
它实际上做了什么(如果启用了断言......)是评估表达式true
并测试它是否为true
。它总是如此。简而言之,这是一个无操作。