黑马程序员——内部类不能有静态的成员的原因
2014-12-20 16:57
197 查看
之前没搞明白这个问题,现在明白了做一个记录
这里有几个问题就是
1.要使用某个类的static属性或者方法,那么这个类必须要加载到jvm中。
2.static类型的属性和方法,在类加载的时候就会存在于内存中。
3.非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
结论:
如果一个非static的内部类如果具有static的属性或者方法,那么就会出现一种情况:内部类未加载,但是却试图在内存中创建static的属性和方法,这当然是错误的。原因:类还不存在,但却希望操作它的属性和方法。
class Outer{ int x = 2; class Inner{ //这里show方法为何不能是静态的 public void show(){ System.out.println("inner:"+x); } } }
这里有几个问题就是
1.要使用某个类的static属性或者方法,那么这个类必须要加载到jvm中。
2.static类型的属性和方法,在类加载的时候就会存在于内存中。
3.非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
结论:
如果一个非static的内部类如果具有static的属性或者方法,那么就会出现一种情况:内部类未加载,但是却试图在内存中创建static的属性和方法,这当然是错误的。原因:类还不存在,但却希望操作它的属性和方法。
相关文章推荐
- 《黑马程序员》 静态方法中不能直接创建内部类实例对象的原因
- 静态成员函数不能采用const修饰的原因
- C++里的静态成员函数不能用const的原因
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)
- C++静态成员函数不能声明为const、volatile、virtual的原因 与 C++的对象模型
- C++里的静态(static)成员函数(不能用const的原因+static在c++中的第五种含义)
- 黑马程序员——如何理解当内部类中定义了静态成员,改内部类必须是静态的?
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)(转)
- 为什么内联函数,构造函数,静态成员函数不能为virtual函数
- 黑马程序员------静态方法中为什么不能写this和super?这两者之间的区别是什么呢? Day02
- 外围函数不能访问局部类的公有静态成员、类型名、枚举 值(类型名是一个typedef名字,枚举类型名、或一个类名)
- 为什么静态成员函数不能是const
- C++中的静态成员函数不能访问非静态成员
- 为什么静态成员不能访问非静态成员
- 内部类的序列化问题;静态变量不能被序列化的问题
- 类的静态方法(函数)中为什么不能调用非静态成员(属性)?
- 黑马程序员 android模拟器在eclipse不能运行的原因
- 为什么内联函数,构造函数,静态成员函数不能为virtual函数
- java中定义动态内部类,静态的主函数不能直接实例化该类