黑马程序员技术交流社区

标题: 局部变量的作用域冲突问题 [打印本页]

作者: 忘忧草    时间: 2012-4-24 19:38
标题: 局部变量的作用域冲突问题
示例1:
usingSystem;
namespacegosoa.com
{
class MyFirstClass
{
static void Main()
{
int j=5;
for(int i=0;i<10;i++)
{
int j=20;
Console.WriteLine(i+j);
}
}
}
}
这段代码编译就会出错,因为第一个j 在作用域是整个Main()方法,这样,其在循环体内也
是有效的 。于是,在循环体内定义一个同名的j 时,就会报错了。

示例2:
using System;
namespace gosoa.com
{
class MyFirstClass
{
int j=30;
static void Main()
{
int j=20;
int i=5;
Console.WriteLine(i+j);
}
}
}
在这段代码中,第一个j 的作用域是整个类,也就是类的字段,第二个j 的声明会替代第一
个j,所以该 程序会输出25.

问题是:都是局部变量的冲突,为什么第一个编译报错,第二个不报错反而替代?

作者: 过客    时间: 2012-4-24 19:47
第一个 i 你加上一个static试一下,其实我也不太清楚
作者: 杨红    时间: 2012-4-24 20:08
示例1中的j都是局部变量,所以会有冲突才报错
而示例2中的第一个定义的 j=30 是一个全局变量,它是可以在main函数中被重新赋值的,所以不会报错,而且这个j=20的值只能用于main函数中的
如果你再写一个新的函数,不对j重新赋值的话,那么j的值还是30
作者: 包连靖    时间: 2012-4-24 20:53
我也觉得是楼上这位的道理.全局变量和局部变量的原因.
作者: 蒋敦方    时间: 2012-4-24 21:47
其实简单说,就是一个局部变量只是同方法里面声明才叫做局部变量,全局变量是在一个类里面!
如果局部变量的值想让其它方法调用的,使用访问区分符来修饰它就可以使用了!{:soso_e121:}
作者: z4226797    时间: 2012-4-24 21:58
   局部变量不能重复声明的吧
作者: 张林春    时间: 2012-4-25 14:52
简单点理解就是,花括号里所声明的变量可以看作是局部变量。...
当你要在另一个方法想用的时候。是用不了的。要重新定义一个。这就是作用域的问题
作者: 许庭洲    时间: 2012-4-27 09:24
主要看你定义的变量j是在Main()方法内部还是在Main()方法外部,若你定义的变量j在Main()方法外部,在Main()方法内部再重新定义j变量程序运行不会报错,这可能是微软对Main()方法规定了变量限制作用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2