当然应该是这样啊
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的成员就是,不是局部变量!

解决方案 »

  1.   

    System.out.println("x="+v.x+"y="+v.y+"z="+v.z);\\我认为应是:20 30 0
    程序第一次执行的是这句结果是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
      

  2.   

    System.out.println("x="+v.x+"y="+v.y+"z="+v.z);\\应是:20 30 5在init里面的int z=5;只是一个局部变量,这个z只在init()函数范围内有效
    而v.z调用的是类的变量z,两个z不能混为一谈。
      

  3.   

    class Variable
    {
       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
         }
    }
    就是这样顺序的....
      

  4.   

    v.z的都是0
    要看得简单点只要把init里面的z换成a就一目了然