A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 忘忧草 中级黑马   /  2012-4-24 19:38  /  2086 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

示例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.

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

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

7 个回复

倒序浏览
第一个 i 你加上一个static试一下,其实我也不太清楚

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
示例1中的j都是局部变量,所以会有冲突才报错
而示例2中的第一个定义的 j=30 是一个全局变量,它是可以在main函数中被重新赋值的,所以不会报错,而且这个j=20的值只能用于main函数中的
如果你再写一个新的函数,不对j重新赋值的话,那么j的值还是30

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我也觉得是楼上这位的道理.全局变量和局部变量的原因.
回复 使用道具 举报
其实简单说,就是一个局部变量只是同方法里面声明才叫做局部变量,全局变量是在一个类里面!
如果局部变量的值想让其它方法调用的,使用访问区分符来修饰它就可以使用了!{:soso_e121:}

点评

也就是第二个例子j=30是全局变量咯  发表于 2012-4-24 23:08

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
   局部变量不能重复声明的吧

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
简单点理解就是,花括号里所声明的变量可以看作是局部变量。...
当你要在另一个方法想用的时候。是用不了的。要重新定义一个。这就是作用域的问题

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
许庭洲 黑马帝 2012-4-27 09:24:11
8#
主要看你定义的变量j是在Main()方法内部还是在Main()方法外部,若你定义的变量j在Main()方法外部,在Main()方法内部再重新定义j变量程序运行不会报错,这可能是微软对Main()方法规定了变量限制作用。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马