关于java里全局变量和局部变量的问题
publicclassTest2{publicstaticvoidmain(Stringargs[]){inta=1;intb=9;for(intj=2;j<3;j++)...
public class Test2 {
public static void main(String args[]){
int a = 1;
int b = 9;
for (int j = 2; j < 3; j++) {
a++;
System.out.println(a);
b++;
}
}
b = b;
System.out.println(b);
}
不是说循环里的是局部变量吗,变量值只能在循环内部有效,那为什么最后都出循环体了,我最后b那里的值居然是循环体内的b++的值?
为什么最后的b的赋值不是一开始的全局变量9?
到底main方法里面都是局部变量 ,还是就for循环里是局部变量,还是main方法外面才是全局变量?我分不清了!
到底是说局部变量会覆盖全局变量? 但是又说局部变量只能在局部有效,这不是前后矛盾吗?到底是怎么回事啊 彻底蒙了………… 展开
public static void main(String args[]){
int a = 1;
int b = 9;
for (int j = 2; j < 3; j++) {
a++;
System.out.println(a);
b++;
}
}
b = b;
System.out.println(b);
}
不是说循环里的是局部变量吗,变量值只能在循环内部有效,那为什么最后都出循环体了,我最后b那里的值居然是循环体内的b++的值?
为什么最后的b的赋值不是一开始的全局变量9?
到底main方法里面都是局部变量 ,还是就for循环里是局部变量,还是main方法外面才是全局变量?我分不清了!
到底是说局部变量会覆盖全局变量? 但是又说局部变量只能在局部有效,这不是前后矛盾吗?到底是怎么回事啊 彻底蒙了………… 展开
18个回答
展开全部
所说的全局变量及局部变量,都是指变量的作用域而言
所有的变量都叫局部变量也未未偿不可
比如
public class Test{
int a = 0; // 1
public void fun(){
int b = 0;// 2
for(int i=0;i<10;i++){
int c = 0;// 3
}
}
}
在上例中,一对大括号 { } 中的部分就是一个作用域。
1部分定义的 变量,在它所在的作用域,及它的子作用域中都有效。即在2,3部分都可以使用。
2部分定义的 变量,即在2,3部分都可以使用。在1中就不可以。
3部分定义的 变量,即在3部分都可以使用。在1,2中就不可以。
在这里,1 部分定义的变量就是所说的全局变量。因为对于一个类来说,它已经是最顶级的存在了。2,3部分都可以叫做局部变量。
而所说的 局部变量只能在局部有效
是指在该部分定义的变量。
你举的例子,中 b 变量是在循环体外定义的,所以在循环体内也是起作用的。
所以出了循环体以后它已经是 b++以后的值了,
b = b;
这一句没意义。
所有的变量都叫局部变量也未未偿不可
比如
public class Test{
int a = 0; // 1
public void fun(){
int b = 0;// 2
for(int i=0;i<10;i++){
int c = 0;// 3
}
}
}
在上例中,一对大括号 { } 中的部分就是一个作用域。
1部分定义的 变量,在它所在的作用域,及它的子作用域中都有效。即在2,3部分都可以使用。
2部分定义的 变量,即在2,3部分都可以使用。在1中就不可以。
3部分定义的 变量,即在3部分都可以使用。在1,2中就不可以。
在这里,1 部分定义的变量就是所说的全局变量。因为对于一个类来说,它已经是最顶级的存在了。2,3部分都可以叫做局部变量。
而所说的 局部变量只能在局部有效
是指在该部分定义的变量。
你举的例子,中 b 变量是在循环体外定义的,所以在循环体内也是起作用的。
所以出了循环体以后它已经是 b++以后的值了,
b = b;
这一句没意义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
循环里的局部变量是说你在循环里定义这个变量,不是在循环里调用,你在for循环里面 int C = 0
你再在外面就调用不了C这个变量
你再在外面就调用不了C这个变量
更多追问追答
追问
那我一开始定义的b=9 这个算什么 是全局还是也是局部?
追答
一般全局变量都是静态变量 public static int i=100;一般都这么声明
b=9是整个main方法下的局部变量但是他的作用域是整个main方法,你声明变量的位置不同作用域也不同,跟他们调用的位置没关系
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的main方法里面的都是局部变量。。。for循环里面的a,和b都是main方法定义的局部变量,你给b++自增1,b=10,最后跳出for循环,但此时的main方法还没有结束,b的值就变成了10啦。你去掉b=b,输出的值也会是10.你记住,for循环也是main方法的一部分
更多追问追答
追问
那这么说我一开始定义的b=9 也算是局部变量?for循环里面也都是局部变量?那我如果一开始在for循环前面不定义b,我直接在for里面定义个局部变量,那等跳出这个循环,我在输出语句时候要输出b,为什么会报错,我知道原因是必须在for循环之前定义,那既然都是变量,为什么跳出循环在输出b就不行?
追答
你在for循环里面定义b的话,b的作用域就是for循环。出了for循环就会被会被回收。输出当然会错。你在main方法中定义,就是在main方法结束前,b都是有效的
哈哈,我可以帮你回答下,下面你问的那个问题:
char d=a-32;为什么会出错?
因为a-32是一个表达式,,32为int类型的,进行a-32运算时,编译器会自己将a强转为Int类型,所以说,a-32计算的结果是int类型的,你将其赋值给一个char类型,当然会编译出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
局部变量只是相对而言,在main()方法的for()循环中,a,b可以当作是for()循环的全局变量,a,b的值会随着for()循环的每一次循环赋值而变化;如果在for()循环里面再声明变量a,b,那么跳出循环之后打印a,b的值就分别是1,9
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
全局和局部是看你在哪里申明了变量,for循环里并没有申明变量,而是对循环外的变量进行了引用。还有你贴的程序代码有问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询