关于调用静态成员变量

mtdhy 2009-09-10 09:51:21
程序中第三行int i=47;的前边加个static结果就变了,但是不明白为什么?谁能告诉我为啥啊?

之前结果为:

第一个实例对象调用变量i的结果:47
调用call()方法
0 1 2

第二个实例对象调用变量i的结果:60
调用call()方法
0 1 2

改后结果变为:

第一个实例对象调用变量i的结果:60
调用call()方法
0 1 2

第二个实例对象调用变量i的结果:3
调用call()方法
0 1 2

package Practice;

public class TransferProperty {
int i = 47;

public void call() {
System.out.println("调用call()方法");
for (i = 0; i < 3; i++) {
System.out.print(i + " ");
if (i == 2) {
System.out.println("\n");
}
}
}

public TransferProperty() {

}

public static void main(String[] args) {
TransferProperty t1 = new TransferProperty();
TransferProperty t2 = new TransferProperty();
t2.i = 60;
System.out.println("第一个实例对象调用变量i的结果:" + t1.i++);
t1.call();
System.out.println("第二个实例对象调用变量i的结果:" + t2.i);
t2.call();
}

}
...全文
92 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy357510564 2009-09-10
  • 打赏
  • 举报
回复
似乎被解决了
yanliang_xt 2009-09-10
  • 打赏
  • 举报
回复
前面加了个static 就是全局共享,所有的实例只有一个变量。

第一个实例对象调用变量i的结果:60
这个不难理解:t2.i = 60;

第二个实例对象调用变量i的结果:3

这个是因为你的循环里用这个i也是全局变量i同样对其进行了修改造成的。





ltandfyy 2009-09-10
  • 打赏
  • 举报
回复
“程序中第三行int i=47;的前边加个static结果就变了”
加static这个变量不是属于某个对象,而是属于整个类,每个对象调用的都是这个类的变量,是同一个!
不加每个对象都有自己的这个成员变量!
luxiaoshuai 2009-09-10
  • 打赏
  • 举报
回复
晕....整了半天不知道怎么回事...期待高手...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧