关于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方法外面才是全局变量?我分不清了!
到底是说局部变量会覆盖全局变量? 但是又说局部变量只能在局部有效,这不是前后矛盾吗?到底是怎么回事啊 彻底蒙了…………
展开
 我来答
百度网友845f74e61
2013-05-09 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1622万
展开全部
所说的全局变量及局部变量,都是指变量的作用域而言

所有的变量都叫局部变量也未未偿不可
比如
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;
这一句没意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a5678e08f7
2013-05-09 · TA获得超过408个赞
知道小有建树答主
回答量:668
采纳率:0%
帮助的人:619万
展开全部
循环里的局部变量是说你在循环里定义这个变量,不是在循环里调用,你在for循环里面 int C = 0
你再在外面就调用不了C这个变量
更多追问追答
追问
那我一开始定义的b=9 这个算什么 是全局还是也是局部?
追答
一般全局变量都是静态变量 public static int i=100;一般都这么声明
b=9是整个main方法下的局部变量但是他的作用域是整个main方法,你声明变量的位置不同作用域也不同,跟他们调用的位置没关系
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
木星上的程序员
2013-05-09 · TA获得超过476个赞
知道小有建树答主
回答量:602
采纳率:0%
帮助的人:410万
展开全部
你的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类型,当然会编译出错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kiley1984
2013-05-12 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:100
采纳率:85%
帮助的人:67.5万
展开全部
局部变量只是相对而言,在main()方法的for()循环中,a,b可以当作是for()循环的全局变量,a,b的值会随着for()循环的每一次循环赋值而变化;如果在for()循环里面再声明变量a,b,那么跳出循环之后打印a,b的值就分别是1,9
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xhs10195
2013-05-09
知道答主
回答量:34
采纳率:0%
帮助的人:16.1万
展开全部
全局和局部是看你在哪里申明了变量,for循环里并没有申明变量,而是对循环外的变量进行了引用。还有你贴的程序代码有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(16)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式