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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张迁 中级黑马   /  2013-4-28 18:10  /  6031 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张迁 于 2013-4-29 20:37 编辑

为什么静态方法中不能定义静态变量?
  1. class WenTi {
  2.         public static void main(String[] args) {
  3.                 static int num = 10;
  4.                 System.out.println(num);
  5.         }
  6. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

12 个回复

倒序浏览
定义为static 的变量是和类相关的,也就是说它是类变量,所以只能定义为全局变量而不是局部变量
回复 使用道具 举报
static 静态方法里 定义的就是静态的变量,只不过作用域只在方法内。
你可以定义一个全局的静态变量。在这个方法中使用。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
从静态变量的使用方法中,是用类名.方法名(),我们就可以知道,静态成员都是属于类的,所以无法在类的方法中再进行定义

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
无论是静态方法还是非静态方法,他里面的变量都属于局部变量。而局部变量是不能定义成静态类型的,静态类型的都是在初始化类的时候最先初始化的,存在在方法区的静态代码块里,如果你定义了静态的局部变量,那么就会造成在还没调用的时候这个局部变量却已经初始化好了,局部变量是木有初始化值的。
而且吧,我觉得,把局部变量定义成静态的是一种浪费。。。你函数执行完了,局部变量就没啥用了,如果你定义成静态的了,那么就一直就在那存着,多浪费空间。
再者说,如果你想要这个变量一直有用,你就得把他定义成成员变量,成员变量是可以定义成静态的

=-= 这个就是我的理解。。其实我也是刚学完这儿·····

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
static关键字修饰的成员是类成员,有类Field,类方法,静态初始化块,类成员只能定义在类里。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
说来说去 用最简单的一句话说就是 static只存在于类中,而不是在方法里   ,它是随着类的创建而创建,在对象创建之前.  

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

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

这是我的一些理解,谢谢!

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
wujie 中级黑马 2013-4-28 22:11:52
9#
其实就是规则,static修饰的是成员变量,不能修饰局部变量,在方法里的是局部变量。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
记住一点:static静态修饰符修饰的变量是共享的、全局的,而方法内部定义的变量都是局部的、临时的,假设把static拿来修饰方法内部的变量岂不是矛盾了?
回复 使用道具 举报
邹晓慧 发表于 2013-4-28 19:50
无论是静态方法还是非静态方法,他里面的变量都属于局部变量。而局部变量是不能定义成静态类型的,静态类型 ...

谢谢啊!
回复 使用道具 举报
wujie 发表于 2013-4-28 22:11
其实就是规则,static修饰的是成员变量,不能修饰局部变量,在方法里的是局部变量。 ...

明白了!
回复 使用道具 举报
shenqi 发表于 2013-4-28 22:54
记住一点:static静态修饰符修饰的变量是共享的、全局的,而方法内部定义的变量都是局部的、临时的,假设把 ...

嗯,我明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马