黑马程序员技术交流社区

标题: java简单小问题 [打印本页]

作者: 奥特曼爱小怪兽    时间: 2012-4-24 02:59
标题: java简单小问题
本帖最后由 徐晓磊 于 2012-4-24 03:02 编辑


1.为什么在方法中不能够声明静态变量。
2.为什么内部类不能有静态的方法,变量,除非内部类是静态内部类?

捕获2.PNG (30.91 KB, 下载次数: 21)

捕获2.PNG

作者: 王勃    时间: 2012-4-24 04:41
本帖最后由 王明(1988) 于 2012-4-24 06:08 编辑

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


作者: 张成龙    时间: 2012-4-24 06:47
static的用法:sttic是一个修饰符,用于修饰成员(成员变量,成员函数);
变量在方法中时就是局部变量,因而不能被static修饰。
static的特点:stati优先于对象存在。所以当内部类中定义了静态成员,该内部类必须是static的。
作者: liqian    时间: 2012-4-24 07:36
1.一般在需要实现以下两个功能时使用静态变量:在对象之间共享值时; 方便访问变量时。静态成员属于类,被这个类的所有实例所共享,所以在方法中不能声明静态变量。
2.被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。所以在内部类中定义了静态成员,该内部类一定也是静态的





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2