class Member{
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;
}
}
public class MemberTest{
public static void main(String args[]){
Member m1=new Member();
Member m2=new Member();
m1.setClassVar(1); //这里不是给ClassVar赋值1了吗!?可是为什么是打印出下面的2呢!?
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
麻烦看得懂的给我清楚地解释一下好吗!?
----------------解决方案--------------------------------------------------------
classVar是一个静态的变量,在内在中只开辟一个地址!即对象m1,m2共用一个变量classVar,当m1给ClassVar赋值1,然后m2再给ClassVar赋值就会覆盖原来的值!所以就人打印出后面的值了!
----------------解决方案--------------------------------------------------------
改成这样就可以了!
class Member{
/*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;
}
}
public class MemberTest{
public static void main(String args[]){
Member m1=new Member();
Member m2=new Member();
m1.setClassVar(1); //这里不是给ClassVar赋值1了吗!?可是为什么是打印出下面的2呢!?
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());
}
}
----------------解决方案--------------------------------------------------------
注意static修饰符的使用
1,静态域
类的成员变量 不属于任何方法 可以直接使用类名引用它
2,静态方法
属于整个类,在内存中分配公共的内存空间
不能直接操纵和处理类的非静态域,只能处理属于类的成员变量
可以直接使用类名调用类的静态方法
3,静态初始化
初始化静态变量 静态初始化在所属类被加载到内存时进行
----------------解决方案--------------------------------------------------------