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()方法你能说说为什么吗?
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()方法你能说说为什么吗?
将第二行代码“int i = 47;”改为“static int i = 47;”
由于你把i改为static的了,所以这个属性就与类有关了,整个类产生的所有的实例共用一个i,任何地方改变它
它,另一个对象得到的值都是改变后的值``
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();
}
}
结果一模一样啊!