非静态内部类中为什么不能定义静态成员?但允许定义有final修饰的静态变量

public class OuterTest{
    class InnerTest{
        public static int i;    
    }
}

如上写法会报错,原因是:如果非静态内部类中定义了静态成员i,要实现i 变量的初始化过程,就应该是先执行外部类的加载再实现内部类的加载,而内部类是非静态的,内部类的初始化必须是在外部类创建对象之后进行的,但是静态变量的加载又必须在对象创建之前完成,这样就出现了矛盾;

public class OuterTest{
    class InnerTest{
        public static final int i = 5;    
    }
}

但如果给静态成员变量加上修饰符final,就不会报错,因为这时i相当于就是一个常量,java中的常量是存放在常量池的,加载常量不需要加载类,不会产生矛盾;

猜你喜欢

转载自www.cnblogs.com/fjysweet/p/9316578.html
今日推荐