| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 252 人关注过本帖
标题:一个简单的JAVA问题
收藏  订阅  推荐  打印 
chenzhanpeng
Rank: 3Rank: 3
等级:中级会员
帖子:271
积分:2820
注册:2007-1-5
一个简单的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-8-7 17:09
huwangvs
Rank: 12Rank: 12Rank: 12
等级:版主
威望:17
帖子:687
积分:7832
注册:2007-2-4

静态的i是类变量,对于每个实例对象来说它只有唯一的一个副本。
而j是非静态变量,是实例变量,对于每个实例对象它都有一个副本。
所以通过不同的对象修改非静态变量的话,只是修改对象自己的变量,和其他对象里的变量没关系。
而静态变量就一个,所以你修改了后对所有对象都影响
2007-8-7 17:14
hwoarangzk
Rank: 12Rank: 12Rank: 12
来自:冰封王座
等级:贵宾
威望:12
帖子:1890
积分:20518
注册:2007-7-17

静态变量是属于一个类的,只要是同一个类创建的对象就公用一个静态变量,在你的程序里面,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-8-7 17:37
maple311
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2007-8-6

静态变量属于类,一个静态变量在一个进程中只存在一份。

非静态便令属于对象实例,可以有很多。
2007-8-7 21:49
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.056907 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved