静态块EclipseJava中的断言
我在研究assert,所以编写了以下代码静态块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
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来说:这是静态初始化代码。在为该类调用任何方法之前,它将在第一次加载该类时运行。Yupjavaw
就是这样做的,这里描述了@iccthedral:Cracking,谢谢-将把它编辑成答案。是的javaw
就是这样做的,这里描述了@iccthedral:Cracking,谢谢-将其编辑成答案。