【发布时间】:2015-09-22 19:43:35
【问题描述】:
为什么 java 不允许在非静态内部类中使用静态初始化块进行静态声明?
在下面的代码中,outer2 会起作用,而 inner2 不会,尽管做了同样的事情。有任何想法吗?我不是在寻找解决方法,我只是想了解为什么 java 无法做到这一点。
public class WhyUNoStatic {
public static final String outer1 = "snth"; // ok
public static final String outer2; // ok
static
{
outer2 = "snth";
}
public class Inner {
public static final String inner1 = "snth"; // still ok!
public static final String inner2; // FAILURE TIME
static
{
inner2 = "snth";
}
}
}
编辑:注意inner1 可以正常工作。并不是说 java 禁止内部类中的静态变量,它只是禁止声明它们。
【问题讨论】:
-
因为内部类不能有
static非最终成员,而static { }是静态成员。也许? -
Java 禁止内部类中的非常量变量。
inner1是一个常量变量。inner2不是。
标签: java static declaration inner-classes