Topic: [求助]static修饰符修饰的方法的问题

  Print this page

1.[求助]static修饰符修饰的方法的问题 Copy to clipboard
Posted by: 科大梦之队
Posted on: 2005-09-15 18:24

class StaticAndInstance{
  static int classVar;
  int instanceVar;
  static void setClassVar(int i){
    classVar=i;
  
  }
  static int getClassVar(){
    return classVar;
  }
  void setInstanceVar(int i){
    classVar=i;
    instanceVar=i;
  }
  int getInstanceVar(){
    return instanceVar;
  }
  }
class Xbz{
    public static void main(String args[]){
    StaticAndInstance m1=new StaticAndInstance();
    StaticAndInstance m2=new StaticAndInstance();
    m1.setClassVar(1);
    m2.setClassVar(2);
    System.out.println("m1.classVar="+m1.getClassVar()+
    "m2.classVar="+m2.getClassVar());
    m1.setInstanceVar(11);
    m2.setInstanceVar(22);
    System.out.println("m1.instanceVar="+m1.getInstanceVar()+
    "m2.instanceVar="+m2.getInstanceVar());
      
    
  }
}
运行的结果是:m1.classVar=2 m2.classVar=2
m1.instanceVar=11 m2.instanceVar=22
我不明白的是:m1.classVar=2,它为什么会等于2呢?
我知道的是:有static修饰的方法不能在类方法中存取实例变量,而没有static修饰的方法则可以在实例方法中存取类域.
但是我在这个程序中,理解不了,希望哪位大侠指点迷津!小弟不胜感谢!

2.Re:[求助]static修饰符修饰的方法的问题 [Re: 科大梦之队] Copy to clipboard
Posted by: PrimeJava
Posted on: 2005-09-15 19:49

Static修饰的变量可以理解为类变量,即无论产生多少个A类的对象,这些对象都共同拥有那个类变量。

3.Re:[求助]static修饰符修饰的方法的问题 [Re: 科大梦之队] Copy to clipboard
Posted by: 科大梦之队
Posted on: 2005-09-15 20:13

上面这位老兄真是一语点醒梦中人!!!!
因为static的方法是属于整个类的,它在内存中的代码段将随着类的定义而进行分配和装载,不被任何一个对象专有.也就是说当"m2.setClassVar(2);"时,整个类的成员变量都为2了,包括刚刚"m1.setClassVar(1);",我说的对吧?
谢谢你的帮助!

4.Re:[求助]static修饰符修饰的方法的问题 [Re: 科大梦之队] Copy to clipboard
Posted by: GlennLi
Posted on: 2005-09-16 10:32

包括刚刚"m1.setClassVar(1);" 中的classVar

用static修饰的成员变量可以理解为类中的全局变量,在类中一处被修改了,其他处也被修改,在整个类中是统一的值!


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923