在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
谢谢 展开
{
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
谢谢 展开
3个回答
展开全部
静态变量存在内存的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也就是这个原因。
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也就是这个原因。
展开全部
类方法只能访问类变量,而实例方法既可以访问类变量,也可以实例变量
静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,
静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看的材料写的不够好,应该是静态方法不能访问实例变量。
因为静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,不知道这么说你能理解吗?
还有就是静态方法和变量与实例方法和变量的存储位置也是不同的,静态方法和变量存储在堆栈中,而实例变量和方法存储在堆中
因为静态方法和静态变量是属于这个类的,只有一份,用类名.方法名来访问,而实例变量是每一个类的实例都有一份的,所以可以理解为静态变量和方法对于一个类的所有实例都是一样的,而实例变量对于每个实例是不同的,所以如果在静态方法里使用的实例变量会造成一致性的问题,不知道这么说你能理解吗?
还有就是静态方法和变量与实例方法和变量的存储位置也是不同的,静态方法和变量存储在堆栈中,而实例变量和方法存储在堆中
追问
谢谢,问题我重新补充了,麻烦你再看一下好吗?谢谢了
追答
就是我上面说的静态方法和静态变量每个类只有一份,所以说Member类只能有一份static int classVar;这个变量,那就可以知道了m1.classVar = m2.classVar = Member.classVar,所以说你在m2中为classVar赋值了就是为这个类的classVar赋值了,所以m1.classVar 也等于2
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |