1

我在学习assert,所以写了如下代码

public class AssertionDemo
{
    static
    {
        int i=7;
        assert i>10:i;
    }
 public static void main(String args[])
 {
     int i=8;
     assert (i<10):8;
     assert (i>10):9;
 }
}

在控制台输出之前,我得到以下对话框

在此处输入图像描述

输出:

Exception in thread "main" java.lang.AssertionError: 7
at logicBuliding.AssertionDemo.<clinit>(AssertionDemo.java:8)

对话框是怎么回事?

4

1 回答 1

5

main我怀疑这不是专门关于断言的——它只是在启动应用程序时甚至无法访问该方法。在大多数情况下,这将表明一个非常严重的错误,并且启动器代码可能没有太多信息可以轻松掌握它到底走了多远。显示一个对话框可能比依赖已经连接的控制台更安全(鉴于我们肯定处于糟糕的情况)。

这是一个稍微简单的程序,其行为方式相同:

public class Test {
    static {
        if (true) {
            throw new RuntimeException("Bang!");
        }
    }

    public static void main(String[] args) {
    }    
}

您不需要 Eclipse 来演示这一点 - 只需使用javaw就会产生相同的效果,如文档所述。java对我来说,从命令行运行只是显示异常:

c:\Users\Jon\Test>java Test
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Bang!
        at Test.<clinit>(Test.java:4)
于 2012-12-22T17:08:15.747 回答