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?
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只是方法调用传过来的一个值的复制品 } }
我是问为什么modify(a);放进去的a为什么不是main方法里定义的那个int a=0;啊?
你是说modify(a);里的a是int a=2? 书上说是private static int a 域变量 编译结果也是 0
结果是0, System.out.println(a); 应该打印的是main中的int a = 0;这个值,
private static int a; 这个被局部变量屏蔽了,我认为
域变量是static的 所以结果是0把?
我觉得,跟那个static 变量没有关系,不信你可以试一下
书上说的 将静态变量a的值复制并传递给modify()方法的局部变量a(参数变量也是局部变量),局部变量a增加1,然后返回(这是局部变量a消失),而静态变量a的值并没有受到影响,所以仍为0, 我想问的是 modify(a);里放进去的变量为什么是域变量 static int a 而不是 main方法里定义的 int a 是不是因为modify方法被static修饰了?
我觉得是放进去的是 main中的a,我也是初学,不知道理解对否,
我试了一下 System.out.println(a); 输出的是main方法里定义的局部变量int a=0; 但是modify(a);里放进去的a应该是域变量 static int a 我就是想知道为啥放进去的不是main方法里的int a 是否因为modifay方法也是static的?
modify(int a)这里定义的
我试了一下 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。 不知道对不对!
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++; } } 改了下你你们再分析,弄明白了基本就没问题了
a++ 应该是 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只是方法调用传过来的一个值的复制品
}
}
你是说modify(a);里的a是int a=2? 书上说是private static int a 域变量 编译结果也是 0
System.out.println(a);
应该打印的是main中的int a = 0;这个值,
这个被局部变量屏蔽了,我认为
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。
不知道对不对!
modify是一个静态方法,他在类没有构建相应的对象时就能够使用,就只有静态变量a可以供他使用
怎么不是。。
另外静态方法里只能操纵静态变量,main方法里定义的a非静态,只能以参数形式引用
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++;
}
}
改了下你你们再分析,弄明白了基本就没问题了