class StaticAndInstance{
static int classVar;
int instanceVar;
static void setClassVar( int i ){
classVar = i;
// instanceVar = i; 不能在类方法中存取实例变量
}
static int getClassVar( ){
return classVar;
}
void setInstanceVar( int i ){
classVar = i; // 可以在实例方法中存取类域
instanceVar = i;
}
int getInstanceVar( ){
return instanceVar;
}
}public class StaticAndInstanceTest{
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( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( ));
System.out.println("m1.classVar = "+m1.getClassVar( )+" m2.classVar = "+m2.getClassVar( )); }
}
上面这个程序的结果中
m1.classVar 为什么=2?为什么下面的输出又变成了22和前面的m1  m2输出不一样了呢?

解决方案 »

  1.   

    类变量是实例共享的,下面的代码将classvar设置成了2
    static void setClassVar( int i ){
    classVar = i;
    // instanceVar = i; 不能在类方法中存取实例变量
    }
    m2.setClassVar( 2 );下面的代码将classvar设置成了22void setInstanceVar( int i ){
    classVar = i; // 可以在实例方法中存取类域
    instanceVar = i;
    }
    m2.setInstanceVar( 22 );
      

  2.   

    因为你的classVar是static变量,在同一个包中全局共享,所以保存的是最后影响他的数据也就是2.所以两个输出都是2,而下面instanceVar是普通变量,每次实例化都生出一个新的,也即m1,m2都是不一样的。
      

  3.   

    为什么结果中m1.classVar = 2 m2.classVar = 2
    m1.classVar=2呢?
    程序中的m1.setClassVar( 1 );中参数不是1么,那m1.classVar应该是等于1呀。
      

  4.   

    哦,我明白了,前面的m1.setClassVar( 1 );根本没有作用,因为类变量被后面的m2.setClassVar( 2 );
    覆盖了,所以mi.classVar就等于2了,
      

  5.   

    那这里的setClassVar和getClassVar是什么用法呀?能简单讲讲么?