【发布时间】:2015-03-01 01:56:05
【问题描述】:
我遇到了一个非常奇怪的编译时错误:
class Super {
Super(int[] array) {
}
}
class Sub extends Super {
private final int number = 1;
Sub() {
super(new int[] { number }); //error
}
}
我得到的错误是
无法从静态上下文访问字段
我的问题
静态上下文在哪里?似乎静态甚至不会在这里发挥作用。
我偶然发现了这个试图回答别人的问题;发现我莫名其妙的错误。有人能解释一下静态上下文在哪里吗?
【问题讨论】:
-
您使用的是哪个编译器?我得到
cannot reference number before supertype constructor has been called。另见 JLS 8.8.7.1。 Explicit Constructor Invocations 声明:“构造函数主体中的显式构造函数调用语句不能引用在此类或任何超类中声明的任何实例变量或实例方法或内部类,或使用 this或 super 任何表达式;否则,会发生编译时错误。” -
@ZouZou 我第一次遇到它是在我手机的 ide AIDE 上,我很确定它使用的是 Dalvik 编译器。然后我跳上我的电脑在 Eclipse Luna 上尝试它,使用他们的 JDK 8u25 编译器并得到相同的错误消息。我不确定为什么它会给我静态上下文错误,所以我认为我应该重新安装 Eclipse。至于 AIDE,我对它给了我一个时髦的错误并不感到惊讶
标签: java inheritance static