如何启用assert语句执行?

时间:2014-10-06 13:43:32

标签: 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;
            assert enabled = true;
            System.out.println("Asserts " + 
               (enabled ? "enabled" : "disabled"));
        }
    }
}

DEMO

JLS 14.10说:

  

在类完成后执行的assert语句   当且仅当主机系统具有时,才启用初始化   确定词法包含断言的顶级类   语句启用断言。

我以为我在Cl课程中通过断言true启用了断言,但它仍无法正常工作。如何启用关于JLS所说的内容的断言?

3 个答案:

答案 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。它总是如此。简而言之,这是一个无操作。