是static 造成的吗?为什么?

classC{publicstaticintx;publicinty;}publicclassCc{publicstaticvoidmain(Stringargs[]){... class C{
public static int x;
public int y;
}
public class Cc{
public static void main(String args []){
C a=new C();
C b=new C();
a.x=10;
a.y=10;
b.x=20;
b.y=20;
System.out.println(a.x);
System.out.println(a.y);
System.out.println(b.x);
System.out.println(b.y);
}
}
为什么输出的是
20
10
20
20呢?
static 到底有什么作用?怎么会造成这样的结果呢?
展开
 我来答
过去爱神泣的人
2011-03-20 · TA获得超过107个赞
知道答主
回答量:78
采纳率:0%
帮助的人:61.3万
展开全部
你好!首先很明确告诉你是是static 造成的,
public static int x;说明x是静态属性。y是非静态属性。
注意:静态属性是属于整个类的,只保存一份,每个类中的对象是共享的,每个类中的对象都可以修改它!(即,这里的X是属于类C的,不管你创建多少个C的对象,无论你在其它类里怎么新建C的对象,C a=new C(); C b=new C();),关于静态X,可以理解为只有一个,a和b共享它)
非静态的属性是属于每个对象的,每个对象都保存一份,互相不能修改对方的(即:这里的a有一个专属它的Y,b也有一个专属它的Y)。

明白了这个后,结果你就知道为什么了吧,因为静态的X只有一个,在对象a中赋值为10,然后b在赋值为20,所以结果就是这样!!

那么现在再来谁static有说明用:静态的属性可以方便不同的对象去调用,去修改它!
但是静态的方法只能操作、调用和访问静态的方法和属性!非静态方法却可以访问静态和非静态的方法!但是静态方法和属性可以直接 类名.方法(或属性) 来调用,非静态的必须新建对象,在通过 对象.方法和属性 来调用

呵呵 希望对你有帮助!!
talenian
2011-03-20 · 超过59用户采纳过TA的回答
知道答主
回答量:147
采纳率:0%
帮助的人:137万
展开全部
据我理解应该是因为static造成的。
因为我的理解一个static 变量属于一个类,而不是一个对象。
如果一个属性是static,那么所有这个类生成的对象都指向同一个属性,因为它是类的属性而不是对象的属性。

以上我的观点不保证正确性,仅供参考,可能有一些地方用的术语不大对,希望你能理解。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TSDDB2
2011-03-20 · TA获得超过406个赞
知道小有建树答主
回答量:323
采纳率:0%
帮助的人:258万
展开全部
修饰为static的成员变量不是存放在堆里的,对象共同引用相同的static成员变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沈阳java
2011-03-20 · TA获得超过1507个赞
知道小有建树答主
回答量:797
采纳率:50%
帮助的人:677万
展开全部
静态变量在内存中是一份的,无论你创建多少个对象,static类型的变量只有一份。所以打印了相同的数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
独孤天麒
2011-03-21
知道答主
回答量:23
采纳率:0%
帮助的人:20.2万
展开全部
是static造成的,static类型的变量在内存中只有一个拷贝。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式