首页上一页 1 下一页尾页 1 条记录 1/1页
请教静态变量作用域
发表在Java图书答疑
2010-03-19
是否精华
是
否
版块置顶:
是
否
书中例7.13:
public class CopyOfTransferProperty {
static int i=47;
public void call(){
System.out.println("调用Call方法");
[font color=#FF0000]for(i=0;i<3;i++)[/font]{
System.out.print(i+" ");
if(i==2){
System.out.println("\n");
}
}
}
public CopyOfTransferProperty(){
}
public static void main(String[] args) {
CopyOfTransferProperty t1=new CopyOfTransferProperty();
CopyOfTransferProperty t2=new CopyOfTransferProperty();
t2.i=60;
System.out.println("第一个实例对象调用变量i的结果:"+t1.i++);
t1.call();
System.out.println("第二个实例对象调用变量i的结果:"+t2.i);
t2.call();
}
}
输出结果:
第一个实例对象调用变量i的结果:60
调用Call方法
0 1 2
第二个实例对象调用变量i的结果:3
调用Call方法
0 1 2
如果在for(i=0;i<3;i++)中的i 前加上int,输出结果就会为:
第一个实例对象调用变量i的结果:60
调用Call方法
0 1 2
第二个实例对象调用变量i的结果:61
调用Call方法
0 1 2
很明显,在for语句中的i是个局部变量,其作用域只在for的范围内有效。
但静态成员变量i(static int i=47;)不是在整个类范围内都有效吗,如此一来,两个同名变量的作用域岂不是发生了重叠,而系统又没有报错。
请给解释一下,谢谢。
另:有个小疑问,例7.8中:static double PI=3.1415; //这是定义的静态常量吗?(书中是这么注释的),这不是变量吗?
public class CopyOfTransferProperty {
static int i=47;
public void call(){
System.out.println("调用Call方法");
[font color=#FF0000]for(i=0;i<3;i++)[/font]{
System.out.print(i+" ");
if(i==2){
System.out.println("\n");
}
}
}
public CopyOfTransferProperty(){
}
public static void main(String[] args) {
CopyOfTransferProperty t1=new CopyOfTransferProperty();
CopyOfTransferProperty t2=new CopyOfTransferProperty();
t2.i=60;
System.out.println("第一个实例对象调用变量i的结果:"+t1.i++);
t1.call();
System.out.println("第二个实例对象调用变量i的结果:"+t2.i);
t2.call();
}
}
输出结果:
第一个实例对象调用变量i的结果:60
调用Call方法
0 1 2
第二个实例对象调用变量i的结果:3
调用Call方法
0 1 2
如果在for(i=0;i<3;i++)中的i 前加上int,输出结果就会为:
第一个实例对象调用变量i的结果:60
调用Call方法
0 1 2
第二个实例对象调用变量i的结果:61
调用Call方法
0 1 2
很明显,在for语句中的i是个局部变量,其作用域只在for的范围内有效。
但静态成员变量i(static int i=47;)不是在整个类范围内都有效吗,如此一来,两个同名变量的作用域岂不是发生了重叠,而系统又没有报错。
请给解释一下,谢谢。
另:有个小疑问,例7.8中:static double PI=3.1415; //这是定义的静态常量吗?(书中是这么注释的),这不是变量吗?