| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 581 人关注过本帖
标题:一个简单的JAVA问题
只看楼主 加入收藏
chenzhanpeng
Rank: 1
等 级:新手上路
帖 子:271
专家分:0
注 册:2007-1-5
收藏
 问题点数:0 回复次数:3 
一个简单的JAVA问题
class my9
{
static int i=100;//静态变量
int j=400;//非静态变量
}
class my10
{
public static void main(String args[])
{ my9 a1=new my9();
my9 a2=new my9();
a1.i=90;
System.out.println
("第1个对象的静态变量值:"+a1.i);
System.out.println
("第2个对象的静态变量值:"+a2.i);
a1.j=80;
System.out.println
("第1个对象的非静态变量值:"+a1.j);
System.out.println
("第2个对象的非静态变量值:"+a2.j);
}
}
输出是 第1个对象的静态变量值:90
第2个对象的静态变量值:90
第1个对象的非静态变量值:80
第2个对象的静态变量值:400

请问输出结果为什么是这样,就是静态与非静态的。。。解释详细一些好吗?谢谢啦
搜索更多相关主题的帖子: JAVA 变量 静态 println 
2007-08-07 17:09
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
静态的i是类变量,对于每个实例对象来说它只有唯一的一个副本。
而j是非静态变量,是实例变量,对于每个实例对象它都有一个副本。
所以通过不同的对象修改非静态变量的话,只是修改对象自己的变量,和其他对象里的变量没关系。
而静态变量就一个,所以你修改了后对所有对象都影响
2007-08-07 17:14
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
静态变量是属于一个类的,只要是同一个类创建的对象就公用一个静态变量,在你的程序里面,i是my9这个类的所有对象公用的,所以如果a1.i=90之后,a2.i也会变成90,因为a1.i和a2.i公用了i这一个变量。而非静态变量就是每个对象各自有的变量了,不是一个类的所有对象能够共享的。所以a1.j和a2.j是不一样的,他们在内存里面也会有两个地址来存放,改变其中一个不会影响另一个。但是如果是静态变量的话,比如你改变了i,那么a2.i也改变了,因为这个静态变量在内存中只有一个地址,a1.i和a2.i都指向这一个地址。

I'm here, as always...
2007-08-07 17:37
maple311
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-8-6
收藏
得分:0 
静态变量属于类,一个静态变量在一个进程中只存在一份。

非静态便令属于对象实例,可以有很多。
2007-08-07 21:49
快速回复:一个简单的JAVA问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020580 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved