public class lei {    private static int a;
public static void main(String[] args) {
int a=0;
modify(a);
System.out.println(a);
   }
public static void modify(int a){
a++;
}
}
书上说modify(a);里的a是 域变量a  为啥不是main方法里的局部变量a? 

解决方案 »

  1.   

    此a非彼a在modify()里的a和main()里的a是两个amodify()里的a的作用域只在modify()里面。
      

  2.   

    modify()是 值传递。
    a++ 应该是 private static int a;  
      

  3.   

    public class lei {    private static int a;    
        public static void main(String[] args) {
            int a=2;
            modify(a);//这里的a是main方法里的a
            System.out.println(a);//这里的a是main方法里的a
       }
        public static void modify(int a){
            a++;
            System.out.println(a);//这里的a只是方法调用传过来的一个值的复制品
        }
    }
      

  4.   

    我是问为什么modify(a);放进去的a为什么不是main方法里定义的那个int a=0;啊?
      

  5.   


    你是说modify(a);里的a是int a=2?  书上说是private static int a 域变量  编译结果也是 0
      

  6.   

    结果是0,
    System.out.println(a);
    应该打印的是main中的int a = 0;这个值,
      

  7.   

    private static int a;    
    这个被局部变量屏蔽了,我认为
      

  8.   

    域变量是static的 所以结果是0把?
      

  9.   

    我觉得,跟那个static 变量没有关系,不信你可以试一下
      

  10.   

    书上说的  将静态变量a的值复制并传递给modify()方法的局部变量a(参数变量也是局部变量),局部变量a增加1,然后返回(这是局部变量a消失),而静态变量a的值并没有受到影响,所以仍为0,   我想问的是 modify(a);里放进去的变量为什么是域变量  static int a  而不是 main方法里定义的 int a  是不是因为modify方法被static修饰了?
      

  11.   

    我觉得是放进去的是 main中的a,我也是初学,不知道理解对否,
      

  12.   

    我试了一下 System.out.println(a); 输出的是main方法里定义的局部变量int a=0; 但是modify(a);里放进去的a应该是域变量 static int a  我就是想知道为啥放进去的不是main方法里的int a  是否因为modifay方法也是static的?
      

  13.   

     modify(int a)这里定义的
      

  14.   

    我试了一下
      private static int a=2;    
      public static void main(String[] args) {
          int a=0;
          modify(a);
          System.out.println(a);
    }
    public static void modify(int a){
        a++;
        System.out.println(a);
    }这样的结果是:1,0
    而且此时还会出现警告:没有读取本地字段a,这个a就是static int a。说明方法中的a是接受了main中
    a的值。然后再改成:
    private static int a=2;    
    public static void main(String[] args) {
        int a=0;
        modify();
        System.out.println(a);
    }
    public static void modify(){
        a++;
        System.out.println(a);
    }将方法中"int a"拿去此时结果是: 3,0我认为当这个方法中传入参数a的时候这个a其实就是将main中的a的地址传给了方法中的a也就是这个a的值就是main方法中的a的值。
    而不传入a的时候这个静态方法就会去找有没有静态变量a。所以这个a就是静态变量a。
    不知道对不对!
      

  15.   

    我也觉得modify(a)方法调用时传的应该是main方法里的a
      

  16.   

    你在main里定义的a,就只能在main里使用。
    modify是一个静态方法,他在类没有构建相应的对象时就能够使用,就只有静态变量a可以供他使用
      

  17.   


    怎么不是。。
      另外静态方法里只能操纵静态变量,main方法里定义的a非静态,只能以参数形式引用
      

  18.   

    System.out.println(new Test().a);  //类对象引用静态变量 
      

  19.   

    public class Test {
        private static int a;    
        public static void main(String[] args) {
    int a=100;
     modify();
    a=a+new Test().a;
                      modify();  
                       System.out.println(new Test().a);  
    System.out.println(a);
       }
        public  static void modify(){
            a++;
        }
    }
    改了下你你们再分析,弄明白了基本就没问题了
      

  20.   

    在方法参数中基本变量是传值的,只一点与复合类型有差别啊,所以在方法中对该参数的修改只在方法体内可见,退出方法后参数仍保持原值。在main方法全局变量a被局部变量a顶替。你可以将全局变量a的值改为5.加以区别。试一下。绝对不会打印出5的。