为什么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 { }
是一个静态成员。这可能是原因? - Luiggi Mendozainner1
是一个常量变量。inner2
不是。 - Sotirios Delimanolis