然后程序才能编译通过。
为什么非静态内部类中不能有static修饰的属性,但却可以有常量?
如:
public class InnerClassDemo{
? ? int x;
? ? class A{
? ? ? ? static? int a = 0;//这样写是不合法的.
? ? ? ? static final int b=0;//这样写是合法的
? ? }
}
定义一个静态的域或者方法,要求在静态环境或者顶层环境,即如果加上 static class A变成静态内部类就ok非静态内部类 依赖于一个外部类对象,而静态域/方法是不依赖与对象——仅与类相关(细说了,就是加载静态域时,根本没有外部类对象)因此,非静态内部类中不能定义静态域/方法,编译过不了。
而常量之所以可以(不论有无static),因为java在编译期就确定所有常量,放到所谓的常量池当中。常量的机制和普通变量不一样
为什么匿名内部类和局部内部类只能访问final变量
参考: