A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 梁秋瑜 于 2013-5-27 20:47 编辑

非静态方法中不可以定义静态变量,为什么?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

倒序浏览
静态和非静态的方法中的变量都是局部变量,而拒不变量是不能用static修饰的。只有成员变量才能被static修饰。
回复 使用道具 举报
非静态方法只是普通方法,而静态变量是常量,存在于方法区的静态共享区中,在整个类中都是有效的,而普通方法中的变量只在方法内才有效。
回复 使用道具 举报
本帖最后由 武志红 于 2013-5-26 23:34 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
①  静态所属于类,类变量,类函数
   非静态所属于对象,实例变量,实例函数
②  静态是所有对象共享数据
   非静态是对象的特有数据
③ 静态存储在方法区,有默认值
  非静态跟随变量在堆内存存储,也有默认值

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马