本帖最后由 王明(1988) 于 2012-4-24 06:08 编辑
首先,你要明白,static的用处,他可以用来修饰类的成员属性,成员方法,初始化代码块(毕向东视频6天01课中6分10秒说了这句话---static只能修饰成员变量成员方法,不能修饰局部变量。),再来说说为什么吧。
第一个:你的方法是非静态方法,假如在里面用static修饰一个局部变量,没听过静态局部变量吧,他在内存中是怎么申请空间的,当然无从说起了。
局部变量都存储在栈中,而类的静态成员变量都存储在数据段中(data segment的静态存储区),那方法里的静态局部变量我表示不知该将他放在何处。再者,当方法栈被释放后,
静态局部变量是还要保存在内存中吗?这明显不合适啊。。。所以在非静态方法里,不能有静态局部变量。
第二个:java中规定不允许在非静态内部类中定义静态成员属性,静态成员方法,静态初始化块。其次,你可以想象一下如何去指向这个静态成员。
非静态内部类是通过外部类的this指针指向的。那么对于非静态内部类的动态成员,可以通过两个this指针确定位置。但是如果允许静态成员会出现什么情况?
首先,静态成员是不能通过任何this指针的,但是为了确定这个成员,必须确定这个成员所在的类实例。但是这个实例必须通过一个this指针确定。这在语法说不通啊(矛盾)。
你写个例子,就O了:
看图:
|