当然应该是这样啊
Variable v = new Variable();
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);//这个时候根本没有执行init,x,y,z都是0
v.init(20,30) //{
this.x=x;
this.y=y;
int z=5;\\(z是局部变量)
System.out.println("x="+x+"y="+y+"z="+z);//这里的z还是上一行的局部变量,所以为5
}
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);//这里的z是v的成员就是,不是局部变量!
Variable v = new Variable();
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);//这个时候根本没有执行init,x,y,z都是0
v.init(20,30) //{
this.x=x;
this.y=y;
int z=5;\\(z是局部变量)
System.out.println("x="+x+"y="+y+"z="+z);//这里的z还是上一行的局部变量,所以为5
}
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);//这里的z是v的成员就是,不是局部变量!
程序第一次执行的是这句结果是x=0 y=0 z=0 因为对象的成员被初始化为0,没有问题
下面执行的是v.init(20,30);
这个时候调用的是System.out.println("x="+x+"y="+y+"z="+z);\\这明白
因为他是再方法里面输出的,这个时候的z引用的是局部变量所以x=20 y=30 z=5
最后执行的是
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);\\应是:20 30 5
执行init方法的时候,没有给成员z赋值,所以还是初始化的值0
而v.z调用的是类的变量z,两个z不能混为一谈。
{
int x=0,y=0,z=0;//(z为类的域变量)
void init (int x,int y)
{
this.x=x;
this.y=y;
int z=5;//(z是局部变量)
System.out.println("x="+x+"y="+y+"z="+z);//这明白
}
}
public class VariableTest
{
public static void main(String args[])
{
Variable v = new Variable();
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);// 0,0,0
v.init(20,30); // 20, 30, 5
System.out.println("x="+v.x+"y="+v.y+"z="+v.z);// 20, 30, 0
}
}
就是这样顺序的....
要看得简单点只要把init里面的z换成a就一目了然