程序中第三行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();
}}

解决方案 »

  1.   

    “程序中第三行int i=47;的前边加个static结果就变了”
    加static这个变量不是属于某个对象,而是属于整个类,每个对象调用的都是这个类的变量,是同一个!
    不加每个对象都有自己的这个成员变量!
      

  2.   

    前面加了个static 就是全局共享,所有的实例只有一个变量。第一个实例对象调用变量i的结果:60 
    这个不难理解:t2.i = 60;第二个实例对象调用变量i的结果:3 这个是因为你的循环里用这个i也是全局变量i同样对其进行了修改造成的。