在java中,“类方法不能访问实例变量”是什么意思

2025-05-09 13:04:05
推荐回答(3个)
回答1:

静态变量存在内存的DATA SEGMENT中,m1和m2的classVar都对它进行引用,m1.classVar和m2.classVar里面存的地址一样,执行m1.setClassVar(1);classVar的值被赋值为1;现在m2.的classVar因为和m1.classVar所指的一样;所以也是1,执行m2.setClassVar(2);classVar的值被赋值为2;m1.classVar和m2.classVar里面存的地址一样,m1.classVar也跟着改变为2。
m1.classVar和m2.classVar所指一样,m1和m2不管谁改变静态变量,另一个也会跟着改变
你在m1.setClassVar(1);后面加上System.out.println("m1.classVar=" + m1.getClassVar() + "m2.classVar="+ m2.getClassVar());输出是m1.classVar=1m2.classVar=1也就是这个原因。

回答2:

类方法只能访问类变量,而实例方法既可以访问类变量,也可以实例变量
静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,

回答3:

你看的材料写的不够好,应该是静态方法不能访问实例变量。
因为静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,不知道这么说你能理解吗?
还有就是静态方法和变量与实例方法和变量的存储位置也是不同的,静态方法和变量存储在堆栈中,而实例变量和方法存储在堆中