【发布时间】:2014-03-24 07:11:26
【问题描述】:
附注:
This question has been edited a few times as my previous code doesn't demonstrate the problem. There are some answers which may not make perfect sense against the edited question
我有一个名为Son.java的公共课程
package com.t;
public class Son extends Father {
static int i;
static {
System.out.println("son - static");
i = 19;
}
{
System.out.println("son - init-block");
}
public static void main(String[] args) {
//Son s = new Son();
int a[] = new int[2];
System.out.println(a[5]);
}
}
class Father {
static {
System.out.println("f - static");
}
{
System.out.println("f - init-block");
}
}
当我第一次运行程序时:
输出是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.t.Son.main(Son.java:19)
f - static
son - static
然后当我运行这个程序时(输出顺序是random)
输出是:
f - static
son - static
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.t.Son.main(Son.java:19)
我读到static 块在类初始化时执行。
但是为什么这里先出现异常,然后执行静态块呢?
我也在使用Eclipse 来运行我的程序。
谁能解释一下?
【问题讨论】:
-
在您的情况下,“a”索引的最大值为 1。因为数组的索引从 0 开始。
-
您确实应该提供一个完整的示例,其他人可以尝试重现该问题。
-
main方法属于哪个类?
-
@Thinker:我们甚至还没有一个场景。你还没有提供一个完整的程序。我们甚至不知道什么类包含
main!请编辑您的问题,以便我们可以简单地将一段代码复制到文本编辑器中,编译并运行。听起来你已经得到了,但出于某种原因,你决定从你的问题中删掉其中的一部分:( -
好吧,我认为标准输出和标准错误的缓冲发生在操作系统级别,而不是在 Java 中。所以这使得这是一个关于操作系统的问题,而不是 Java 问题。这可能归结为在您运行代码时操作系统正在执行的其他操作。根据我在 07:29:23Z 的评论,这不是由 Java 定义的。