java的成员内部类不可以定义静态变量,为什么要设计? 以及真的完全不能静态的东西吗?
public class InnerClassDemo {
class InnerClass{
//1、这样是可以的,这样编译器会在编译的时候就将这种语句变成常量值(也就是说可以定义所有的static final + 基本数据类型)
static final int i = 50;
//2、这样不可以,虽然也为static final 但是说到底还是个变量对象,所以不可以这样
static final String str = new String("");
//3、与上相同
static InnerClass innerClass = new InnerClass();
}
}
其实内部类并不是完全不能出现static 这样的修饰的,只要符合第一种情况的就是可以的。
而第二种,第三种的情况肯定是不行的,为什么?
就用第三种情况来做个反证,假如说允许第三种情况出现。
那么根据初始化的流程我们知道,在类加载的时候,static变量就会被初始化,那么我们InnerClass对象在没有InnerClassDemo这个对象的时候便生成了。。这样这个成员内部类就脱离了外部类的掌控,不需要外部类的对象就可以生成内部类的对象,这与成员内部类的定义就相驳了,因为我们知道成员内部类的对象必须是现有外部类的对象才能创建,并且是绑定在一起的,所以成员内部类不可以定义静态变量。