package chapter07;public class StaticVariable {
    int i = 47;
    public void call(){
     System.out.println("调用call()方法");
     for(i=0;i<3;i++){
     System.out.print(i+" ");
     }
    }
public static void main(String[] args) {
StaticVariable s1 = new StaticVariable();
StaticVariable s2 = new StaticVariable();
s1.i = 60;
System.out.println("第一个实例对象调用变量i的结果:"+s1.i);
s1.call();
System.out.println("\n第二个实例对象调用变量i的结果:"+s2.i);
s2.call();
}
}以上代码执行结果为:
第一个实例对象调用变量i的结果:60
调用call()方法
0 1 2 
第二个实例对象调用变量i的结果:47
调用call()方法
0 1 2
如果将第二行代码“int i = 47;”改为“static int i = 47;”
执行结果变为:

第一个实例对象调用变量i的结果:60
调用call()方法
0 1 2 
第二个实例对象调用变量i的结果:3
调用call()方法
你能说说为什么吗?

解决方案 »

  1.   

    问题的本身就是答案
    将第二行代码“int i = 47;”改为“static int i = 47;” 
    由于你把i改为static的了,所以这个属性就与类有关了,整个类产生的所有的实例共用一个i,任何地方改变它
    它,另一个对象得到的值都是改变后的值``
      

  2.   

    不论new多少个对象,static的属性都在内存中只有一份,而任何对象都可以修改它,所以得到你的那个结果
      

  3.   


    package com.nileader.test;public class nileader {  int i = 47;
        public void call(){
            System.out.println("调用call()方法");
            for(i=0;i<3;i++){
                System.out.print(i+" ");
            }
        }
    }
    package com.nileader.test;public class StaticVariable {
       
        public static void main(String[] args) {
            nileader s1 = new nileader();
            nileader s2 = new nileader();
            s1.i = 60;
            System.out.println("第一个实例对象调用变量i的结果:"+s1.i);
            s1.call();
            System.out.println("\n第二个实例对象调用变量i的结果:"+s2.i);
            s2.call();
        }
    }
    结果一模一样啊!