3

下面的java代码应该做什么?

public class foo{
    public static void main(String[] args){
        boolean mybool=false;
        assert (mybool==true);
    }
}

这应该引发断言错误吗?如果不是,为什么不呢?(我没有收到任何错误!)

4

4 回答 4

4

运行程序时,您必须通过在命令行中添加“-ea”来启用 Java VM 中的断言:

java -ea -jar myprogram.jar
于 2009-07-17T15:30:21.050 回答
1

Java 语言的断言很奇怪。您必须在启动命令行时启用它们,我不喜欢那样。

出于这个原因,我倾向于使用 3rd-party 库来做我的断言。Apache Commons Lang(通过 Validator 类)、Spring(通过 Assert 类)甚至 JUnit4(通过 Assert 类)都提供了这个功能,并且无论 VM 设置如何,它都可以工作。当您使用 Java5 静态导入时,它们与 java assert 一样易于使用,而且它们更灵活,而且它们允许您在异常中指定错误消息。

于 2009-07-17T15:37:20.100 回答
0

如果在程序中启用了断言,这使得信息可以访问。

如果断言被禁用(这是默认设置),则不会执行断言语句,并且 mybool 的值为 false。

如果启用了断言(jvm 参数 -ea),则断言将被执行,并且通过副作用 mybool 将设置为 true。

您可以使用它来强制启用或禁用断言。例如,如果未启用断言,我的 TestSuites 中有一个测试会失败,以便在运行测试时强制断言始终处于打开状态。

于 2009-07-17T15:37:37.227 回答
0

这应该是扔AssertionErors

如果您使用 Eclipse,则需要打开断言。默认情况下禁用它们。

为此,请将 -ea 添加到 JVM 参数中。

于 2009-07-17T15:28:37.650 回答