黑马程序员技术交流社区

标题: 非静态方法中不可以定义静态变量,为什么? [打印本页]

作者: 梁秋瑜    时间: 2013-5-26 21:32
标题: 非静态方法中不可以定义静态变量,为什么?
本帖最后由 梁秋瑜 于 2013-5-27 20:47 编辑

非静态方法中不可以定义静态变量,为什么?
作者: w270307032    时间: 2013-5-26 21:48
静态和非静态的方法中的变量都是局部变量,而拒不变量是不能用static修饰的。只有成员变量才能被static修饰。
作者: 陈延真    时间: 2013-5-26 22:04
非静态方法只是普通方法,而静态变量是常量,存在于方法区的静态共享区中,在整个类中都是有效的,而普通方法中的变量只在方法内才有效。
作者: 武志红    时间: 2013-5-26 23:31
本帖最后由 武志红 于 2013-5-26 23:34 编辑

http://bbs.itheima.com/forum.php ... id=47976&highlight=
看了这个全面的神贴你就懂啦

摘一句重要的切中要害的
1. 无论是静态方法还是非静态方法的局部变量,在程序执行时都在栈中被初始化,随着 被调用的 方法{}的结束而被释放,生命周期和局部一样长;
2. static定义的变量生存在静态存储空间,生命周期和类一样长;
3. 基于1,2 , 如果在(静态,非静态)方法内定义static 局部变量,都有这种生命周期的矛盾存在;
4.如果只需要在局部实用,将其定义成static也没有意义,如果不仅是要在局部实用,那么根据需求将其定义在方法外部才是更好的解决办法
5. 所以容许静态方法中有静态变量的定义方式 存在, 是矛盾的 而且 不能解决实际问题的。


作者: 王林涛    时间: 2013-5-27 08:33
①  静态所属于类,类变量,类函数
   非静态所属于对象,实例变量,实例函数
②  静态是所有对象共享数据
   非静态是对象的特有数据
③ 静态存储在方法区,有默认值
  非静态跟随变量在堆内存存储,也有默认值
作者: 殇_心。    时间: 2013-5-27 10:09
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!




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