我们为什么不可以在类的方法里面定义一个static的局部变量?
最好是从最本质的地方解析。 谢各位了

解决方案 »

  1.   

    static可以修饰的方法、属性、代码块static优先于类的构造方法,即类在JVM在加载类的时候已经将其执行,如果你将static属性定义在普通方法里,JVM如何去执行这个变量了?所以要使用static修饰的属性那么该方法就必须是static修饰的。否则无法编译。
      

  2.   


    如果是定义在static方法中呢?jvm会不会在加载静态成员变量之后又去加载静态方法?那这时不就可以加载到这个static局部变量了吗?
      

  3.   

    java 认为,如果你定义了一个static 局部变量,你的目的就是延长其生命周期。ok,java说既然你要这么长的生命周期的变量,那么就定义成static field吧,那个够长。咱不费心思去搞局部的,像C那样的麻烦。
    类在,static就在。
      

  4.   

    static只能定义成员变量,方法和代码块,这就是java的语义规范吧。假如在方法中定义一个static局部变量,那么初始化就要在加载类的时候进行。这样貌似没什么意义,方法和对象相关,没有被调用之前,这个变量的存在好像就显得无关紧要。如果你要操作那个static局部变量的话,直接写一个static成员变量就可以,反正都是和类相关的,所以感觉如果允许static局部变量的话有点多此一举,没有增加新的特性,只是带来了理解的麻烦。
      

  5.   

    目测楼主要开始钻牛角尖了。类在,static就在。
      

  6.   

    一楼正解,首先要明确static修饰的方法、属性等都是已经存在的了,并不像生成对象再new()了,一句话:静态就是以不变应万变。
      

  7.   

    楼主是从C++叛变而来?
    局部static变量只是C++支持的一个功能,Java选择不支持这个功能而已,没什么本质不本质的。
    Java认为这个功能除了造成bug之外没有别的用途,所以没有支持它。
      

  8.   

    static 表示静态的,就是大家都可以访问的,如果你能把局部变量也定义成static那么就等于局部变量在方法外部也可以访问,这与java自相矛盾!所以java规定static只能修饰方法、属性、代码块!
    希望楼主不要钻牛角,意义不大!
      

  9.   

    你可以理解为
    静态变量是类A的一个属性,
    而不是类A的某个实例的属性比如在类的构造函数中用一个static的变量累计这个类被实例化(new)了多少次
    class A{
     static int i
     int x 
     new A(){
      i++;
      }
     void m(){;}
    }
    A a1 = new A();
    A a2 = new A();
    这个i不属于a1也不属于a2
    而a1和a2分别由一个属性叫x更具体点说就是
    x是你让a1和a2所(分别)拥有的属性,
    而i是你让类A所拥有的属性。而方法也是同样道理,
    m是你让a1和a2所拥有的方法,
    new完a1和a2以后,
    如果你在m里面定义了一个static的变量,
    你让这个变量是属于a1啊?还是a2啊?还是属于类A啊?当然你可以说
    “按照逻辑,当然要属于类A”如果是这样,那么java就属于“可以动态的给class加入属性”
    大概那就成动态语言,就不是java了。
    至少java不可以我说的也可能不对,
    lz随便看看吧good luck