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
时,断言才会失败。但请注意,一旦类被初始化,就不可能更改其断言状态。