静态块EclipseJava中的断言

静态块EclipseJava中的断言,java,eclipse,exception,runtime-error,assert,Java,Eclipse,Exception,Runtime Error,Assert,我在研究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; } } 公共类断言 { 静止的 { int i=7

我在研究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;
 }
}
公共类断言
{
静止的
{
int i=7;
断言i>10:i;
}
公共静态void main(字符串参数[])
{
int i=8;
断言(i10):9;
}
}
在控制台输出之前,我得到以下对话框

输出:

Exception in thread "main" java.lang.AssertionError: 7
at logicBuliding.AssertionDemo.<clinit>(AssertionDemo.java:8)
线程“main”java.lang.AssertionError中的异常:7 在LogicBuilding.AssertionDemo(AssertionDemo.java:8)
对话框出了什么问题?

我怀疑这并不是专门针对断言的问题,而是启动应用程序时连
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)
c:\Users\Jon\Test>java测试
线程“main”java.lang.ExceptionInInitializeError中出现异常
原因:java.lang.RuntimeException:砰!
测试时。(Test.java:4)

我怀疑这并不是专门针对断言的,只是启动应用程序时连
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)
c:\Users\Jon\Test>java测试
线程“main”java.lang.ExceptionInInitializeError中出现异常
原因:java.lang.RuntimeException:砰!
测试时。(Test.java:4)

您希望使用什么来代替此对话框。发生异常,javaw.exe会告诉您。你愿意它默默地失败吗?我不明白这个问题。有一个异常,因此可以显示该对话框。代码段的第三行似乎很奇怪<代码>静态到底是什么?@JackManey我想看看assert在各种情况下是如何工作的,特别是在程序执行之前,如果我们使用静态块初始化值。assert将如何工作。对JackManey来说:这是静态初始化代码。在为该类调用任何方法之前,它将在第一次加载该类时运行。您希望使用什么来代替此对话框。发生异常,javaw.exe会告诉您。你愿意它默默地失败吗?我不明白这个问题。有一个异常,因此可以显示该对话框。代码段的第三行似乎很奇怪<代码>静态到底是什么?@JackManey我想看看assert在各种情况下是如何工作的,特别是在程序执行之前,如果我们使用静态块初始化值。assert将如何工作。对JackManey来说:这是静态初始化代码。在为该类调用任何方法之前,它将在第一次加载该类时运行。Yup
javaw
就是这样做的,这里描述了@iccthedral:Cracking,谢谢-将把它编辑成答案。是的
javaw
就是这样做的,这里描述了@iccthedral:Cracking,谢谢-将其编辑成答案。