Java 如何使assert语句能够执行?
我编写了以下代码:Java 如何使assert语句能够执行?,java,Java,我编写了以下代码: 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;
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"));
}
}
}
说:
在其类完成后执行的断言语句
当且仅当主机系统
已确定词汇上包含断言的顶级类
语句启用断言
我以为我在
Cl
类中通过assert true启用了断言,但它仍然不起作用。如何启用与JLS所说内容相关的断言?在运行程序时,向java命令行添加-ea选项
java -ea YourClass
-ea
意味着启用断言,这样运行之后,您的断言将在运行时执行,否则它将跳过断言语句
如果您正在使用eclipse
运行配置,在VM参数中写入-ea
,然后运行
如果您试图以编程方式启用断言,可以尝试以下操作:
boolean enabled = false;
ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
assert enabled = true;
System.out.println("Asserts " +
(enabled ? "enabled" : "disabled"));
其他答案解释了如何启用断言。(请注意,您可以为所有类、给定包中的类或单个类启用或禁用它们。)
我只想解释一下断言什么是真的代码>实际上是这样
它不启用或禁用断言。这不是assert
语句的“意思”。事实上,当您执行该语句时,启用或禁用C1
的断言已经太晚了,很可能还会启用或禁用Bar
的断言。只能在初始化类之前为类启用或禁用断言。对于任何给定的类,这种情况(最多)发生一次
它实际做的(如果启用了断言…)是计算表达式true
,并测试它是否为true
。永远都是这样。简而言之,这是一个不可操作的选项。assert enabled==true代码>试试,因为据我所知,只有当逻辑语句导致false
时,断言才会失败。但请注意,一旦类被初始化,就不可能更改其断言状态。