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

classMember{staticintclassVar;intinstanceVar;staticvoidsetClassVar(inti){classVar=i;}... 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);
m2.setClassVar(2);
System.out.println("m1.classVar="+m1.getClassVar()+"m2.classVar="+m2.getClassVar());
}
}

以上的程序为什么得出来的结果是m1.classVar=2m2.classVar=2,而不是m1.classVar=1
谢谢
展开
 我来答
止寄文0
2011-03-24 · TA获得超过134个赞
知道答主
回答量:85
采纳率:0%
帮助的人:82.9万
展开全部
静态变量存在内存的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也就是这个原因。
whcyliweihua
2011-03-24 · 超过11用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:29.5万
展开全部
类方法只能访问类变量,而实例方法既可以访问类变量,也可以实例变量
静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
earnest1234
推荐于2016-07-09 · TA获得超过334个赞
知道小有建树答主
回答量:224
采纳率:0%
帮助的人:284万
展开全部
你看的材料写的不够好,应该是静态方法不能访问实例变量。
因为静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,不知道这么说你能理解吗?
还有就是静态方法和变量与实例方法和变量的存储位置也是不同的,静态方法和变量存储在堆栈中,而实例变量和方法存储在堆中
追问
谢谢,问题我重新补充了,麻烦你再看一下好吗?谢谢了
追答
就是我上面说的静态方法和静态变量每个类只有一份,所以说Member类只能有一份static int classVar;这个变量,那就可以知道了m1.classVar = m2.classVar = Member.classVar,所以说你在m2中为classVar赋值了就是为这个类的classVar赋值了,所以m1.classVar 也等于2
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式