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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊鑫 中级黑马   /  2013-4-18 10:31  /  2894 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

try
{是不是在这里面不能定义变量,否则后面会提示变量不存在}
catch
{}

16 个回复

正序浏览
本帖最后由 ↖落葉下♀媃媚 于 2013-4-30 22:39 编辑

尽量不要定义在里面,能定义在外面就在外面,因为如果你定义到里面,有时往往访问不到
例如:
Console.WriteLine("请输入一个数");
             int number=0;
            bool isnumber=false;
            while(isnumber)
            {
                try
                {
                    number = Convert.ToInt32(Console.ReadLine());//这的变量就定义到外面
                    isnumber = true;
                }
                catch
                {
                    Console.WriteLine("您输入的不是数字");
                  
                }
            for(int i=0;i<number+1;i++)
            {
                Console.WriteLine("{0}+{1}={2}",i,number-i,number);
            }
            }
            Console.ReadKey();
            int age;
           
            int sum = 0;
            for(int   i=0;i<5;i++)
            {
            
            Console.WriteLine("请输入第{0}个人的年龄",i+1);
            try
            {
                age = Convert.ToInt32(Console.ReadLine());
                if(i<0||i>100)
                {Console.WriteLine("年龄不合法");
                    break;
                }
                sum = sum + age;
               
            }
            catch
            {
                Console.WriteLine("你输入的不是数字");
                break;
            }
               

            }
            if (i < 5 == false)//通过判断循环条件控制这句话的输出
            {
                Console.WriteLine("你输入的五个人的平均年龄为{0}", sum / 5);
            }
            Console.ReadKey();
            
回复 使用道具 举报
尽量不在那里定义变量
回复 使用道具 举报
上面的都解释完了,我就求个经验了,可以定义的!!呵呵
回复 使用道具 举报
楼主问的应该是try块中局部变量抛出异常时catch块的接收问题吧?你是怕在catch中无法接收到此抛出异常的变量吧?不用担心,首先,try块抛出异常时,无论try块中引起的变量是存在于try块中的局部变量还是存在程序中的全局变量,只要是出错被try块抛出,相应的catch块都会接受这个错误,而且接收时采用的是类型判断接收,即如果try块中抛出的异常是由于int类型的值引起的,只要catch块有处理int类型错误的代码,无论抛出的数值是多少,catch都会对此异常执行代码。
回复 使用道具 举报
这主要是局部变量的有效期问题,在try里定义的变量,只要try{}语句块里有效,其他如for、while循环一样,如果想要在其他地方继续使用该变量,请不要定义为局部变量。。。。
回复 使用道具 举报
看你到什么地方访问你定义的变量。只要在一个花括号内是可以的。出了花括号就不可以了,不只是try catch 其它也一样
回复 使用道具 举报
可以定义。那主要看你想要那个变量的作用域是多大,如果只是作用于try{}语句块中,当然可以在里面定义了
回复 使用道具 举报
变量的作用域:
开始于定义的地方,
死于定义变量所在大括号的结束部分。
回复 使用道具 举报
张松 中级黑马 2013-4-19 21:38:03
9#
大括号以外是访问不到的。
回复 使用道具 举报
张松 中级黑马 2013-4-19 21:37:25
8#
变量的作用域是指可以使用该变量的代码区域。一般情况下,确定作用域有如下规则。
1、只要变量所属的类在某个作用域内,其字段(也叫做 成员变量)也在该作用域中。
2、局部变量存在于声明该变量的块语句或方法结束的大括号之前的作用域。
3、在for、 while 循环中声明的变量,只存在于该循环体内。

bool b = true;
            Console.WriteLine("请输入一个数字");
            int number = 0;
            try
            {
                number = Convert.ToInt32(Console.ReadLine());

            }
            catch
            {
                Console.WriteLine("输入有误,程序退出");
                b = false;
            }
            if (b)
            {
                Console.WriteLine("您刚刚输入的数字是{0}", number);
            }
例如本例如果把number定义在try内那就只能在try的大括号内使用,
回复 使用道具 举报
陈行 高级黑马 2013-4-19 15:13:58
7#
就记住一点。定义的变量出了大括号就不能直接访问
回复 使用道具 举报
你的意思是想在后面用到这个变量,那就不能在try{}里定义了,因为在try{}中定义的变量是局部,程序运行到try{}语句之后,变量就不存在了,所以你得定义在类中并不在{}内,顺便说下在类中和{}中定义的变量不得同名,但在同个类中,两个{}中定义的变量可以相同。
回复 使用道具 举报
try里面主要是放你觉得可能出现的错误的语句,一般存方法,然后在catch语句中抛出异常 。输出 返回都可以的
回复 使用道具 举报
这个是变量作用域问题,一个变量的生命周期,它的作用域,只在声明它的那个大括号内,出了这个大括号就访问不到了,所以你在try中是可以定义函数的,但是只能在try自身的大括号里使用,出了try的括号是访问不到的;所以,如果你想定义一个整个main函数都能访问的变量,可以在main函数外定义一个静态的字段public static (数据类型)string (变量名)str 如:
  1.   public static string str;//这个变量就可以在该Main方法下都能访问的到
  2.         static void Main(string[] args)
  3.         {
  4.             Console.WriteLine("请您输入一个数字,我们来打印出来它的平方。");
  5.             str =  Console.ReadLine();
  6.             try
  7.             {
  8.                 int numOne = Convert.ToInt32(str);//该变量numOne则只能在try里访问到
  9.                 Console.WriteLine("输入的数的平方为{0}",numOne * numOne);
  10.             }
  11.             catch
  12.             {
  13.                 Console.WriteLine("请输入数字!");   
  14.             }
  15.         }
复制代码
回复 使用道具 举报
看情况吧。
看你定义的变量使用范围在哪。
如果仅仅就只需要在try里面使用就可以定义。
如果需要在catch啊,finnally啊使用  就定义在外面。
回复 使用道具 举报
看是什么情况,例如 for(int i=0;i<x;i++) ,如果你想在后面调用的话就得定义在方法外了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马