我怀疑是在运行以下程序时
public class NonStatic
{
class a
{
static int b;
}
}
编译器给出的错误是“内部类不能有静态声明”
好的,然后我做了一个更改而不是“static int b”到“final static int b”它的给予
相同的错误但是当我写“final static int b = 10”时意味着初始化编译器
没有抱怨,请任何机构解释一下这背后的概念是什么。
答案 0 :(得分:3)
它是如此设计,只需参阅Java语言规范:Inner Classes and Enclosing Instances
内部类是未显式或隐式声明为静态的嵌套类。 [...]内部类可能不会声明静态成员,除非它们是编译时常量字段(第15.28节)。
答案 1 :(得分:1)
final static int b=10
被解释为常量,因此编译器可以内联它。类似地,您可以在界面中拥有静态最终常量。
final static int b
缺少初始化,这是最终成员所必需的,因此编译器无法确定您想要的内容。
出于好奇,请立即尝试下面的块:
static {
b=10;
}
虽然它可能不起作用......
答案 2 :(得分:1)
如果某个字段是静态的,则整个类只有一个副本,而不是每个类的实例一个副本
最后一个字段就像一个常量:一旦给出一个值,它就不能再分配给它。因此,当我们使用final时,我们必须将值赋给变量
看看以下link
答案 3 :(得分:0)
因为最终的静态变量是常量,意味着它不能在运行时更改,而静态变量不是常量,可以在运行时更改。
因此在类中,内部类中不允许使用静态变量,但允许使用常量(final)。
答案 4 :(得分:0)
以下是我对此问题的看法。
TO CROSSCHECK:只需声明内部类是静态的,它将纠正错误。