黑马程序员技术交流社区

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

作者: 张迁    时间: 2013-4-28 18:10
标题: 为什么静态方法中不能定义静态变量?
本帖最后由 张迁 于 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. }
复制代码

作者: 孙浩    时间: 2013-4-28 18:15
定义为static 的变量是和类相关的,也就是说它是类变量,所以只能定义为全局变量而不是局部变量
作者: 金辉    时间: 2013-4-28 18:15
static 静态方法里 定义的就是静态的变量,只不过作用域只在方法内。
你可以定义一个全局的静态变量。在这个方法中使用。

作者: 淡蓝色    时间: 2013-4-28 19:20
从静态变量的使用方法中,是用类名.方法名(),我们就可以知道,静态成员都是属于类的,所以无法在类的方法中再进行定义
作者: 邹晓慧    时间: 2013-4-28 19:50
无论是静态方法还是非静态方法,他里面的变量都属于局部变量。而局部变量是不能定义成静态类型的,静态类型的都是在初始化类的时候最先初始化的,存在在方法区的静态代码块里,如果你定义了静态的局部变量,那么就会造成在还没调用的时候这个局部变量却已经初始化好了,局部变量是木有初始化值的。
而且吧,我觉得,把局部变量定义成静态的是一种浪费。。。你函数执行完了,局部变量就没啥用了,如果你定义成静态的了,那么就一直就在那存着,多浪费空间。
再者说,如果你想要这个变量一直有用,你就得把他定义成成员变量,成员变量是可以定义成静态的

=-= 这个就是我的理解。。其实我也是刚学完这儿·····
作者: xiewen    时间: 2013-4-28 21:13
static关键字修饰的成员是类成员,有类Field,类方法,静态初始化块,类成员只能定义在类里。
作者: 暮夕忆夕颜    时间: 2013-4-28 21:29
说来说去 用最简单的一句话说就是 static只存在于类中,而不是在方法里   ,它是随着类的创建而创建,在对象创建之前.  
作者: Neverbelazy    时间: 2013-4-28 21:58
1. 无论是静态方法还是非静态方法的局部变量,在程序执行时都在栈中被初始化,随着 被调用的 方法{}的结束而被释放,生命周期和局部一样长;
2. static定义的变量生存在静态存储空间,生命周期和类一样长;
3. 基于1,2 , 如果在(静态,非静态)方法内定义static 局部变量,都有这种生命周期的矛盾存在;
4.如果只需要在局部实用,将其定义成static也没有意义,如果不仅是要在局部实用,那么根据需求将其定义在方法外部才是更好的解决办法
5. 所以容许 原帖中的 定义方式 存在, 是矛盾的 而且 不能解决实际问题的。

这是我的一些理解,谢谢!
作者: wujie    时间: 2013-4-28 22:11
其实就是规则,static修饰的是成员变量,不能修饰局部变量,在方法里的是局部变量。
作者: 黄茂霖    时间: 2013-4-28 22:54
记住一点:static静态修饰符修饰的变量是共享的、全局的,而方法内部定义的变量都是局部的、临时的,假设把static拿来修饰方法内部的变量岂不是矛盾了?
作者: 张迁    时间: 2013-4-29 22:40
邹晓慧 发表于 2013-4-28 19:50
无论是静态方法还是非静态方法,他里面的变量都属于局部变量。而局部变量是不能定义成静态类型的,静态类型 ...

谢谢啊!
作者: 张迁    时间: 2013-4-29 22:40
wujie 发表于 2013-4-28 22:11
其实就是规则,static修饰的是成员变量,不能修饰局部变量,在方法里的是局部变量。 ...

明白了!
作者: 张迁    时间: 2013-4-29 22:41
shenqi 发表于 2013-4-28 22:54
记住一点:static静态修饰符修饰的变量是共享的、全局的,而方法内部定义的变量都是局部的、临时的,假设把 ...

嗯,我明白了!




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