java普通内部类不能有static成员,为什么可以有final static成员?
最近在重温”thinking in java”巩固java基础知识,读到7.6.4 static内部类的讲解中,提到static成员只能位于一个类的外部级别,所以普通内部类不可拥有static数据。不是很懂,于是写代码验证一下。
public class Parcle {
private class PContents{
private static int a = 5;
}
}
IDE的确报错,提示
Inner classes cannot have static declarations
于是网上查找答案,大概明白了,普通内部类是依赖于外部类实例的,有外部类实例才能有内部类。而static成员是类所有,与实例无关,当普通内部类有静态成员时就出现矛盾了。所以普通内部类是无法拥有静态成员的。
本以为问题就此结束,但当我对静态成员加上final修饰时,IDE不报错了。目前还没理解为什么会这样的,初步想法时static和final static成员在内存的存储位置有关,先留下问题,待日后查阅相关资料再解答。
public class Parcle {
private class PContents {
private final static int a = 5;
}
}