成员内部类中不能存在任何static的方法和变量
其实成员内部类并不是完全不能出现static:任何方法都不能使用static,有些属性可以使用static。
-
属性使用static的前提有两点:
1)该属性是基本数据类型或者String;
2)该属性必须被final + static同时修饰;
原因:
很多人试图从jvm类加载的角度去分析这个问题,但都是自相矛盾的。
jvm加载规则是:static域随着类的加载被初始化,是先执行的。非static域随着实例化对象被初始化,是后执行的。
按照这个规则:
1、实例化外部类的对象;
2、非静态域的成员内部类Inner Class被加载;
3、初始化Inner Class的static域;
4、实例化内部类的对象;
这个逻辑是走的通的,根本不会出现很多人说的“Inner Class初始化其static域的操作在Inner Class被加载之前就执行了”这种矛盾,
完全就是胡扯硬套。更靠谱的说法是:jdk可以这样做,但不知为什么他设计成了不允许。 可以参考:https://www.zhihu.com/question/342558076/answer/801500157