首页 > 代码库 > try catch和finally

try catch和finally

在C#中这三个关键字用于处理异常。

这三个关键字try是必定要用的,要不然就失去了意义。然后catch和finally可以不用但是要注意遵循原则。

存在一个或多个catch的时可以不用finally,也可以用。

不存在catch时,必须要用finally

  • try代码块主要包括出错的代码
  • catch是处理异常的代码
  • finally是处理异常之后要做的事情

   try  

      {  

          //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 

     }  

   catch //(Exception e)  括号里面的参数是表示的这个catch语句里面要对应处理的错误类型及其参数

   {          

        //throw new Exception("转化失败");  

        //除非try里面执行代码发生了异常,否则这里的代码不会执行

    }  

   finally  

  {  

       //处理异常之后要做的事情

       //不管什么情况都会执行,包括try catch里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally

   }  

try-catch语句的两种书写形式

第一种:try{ 可能出错的程序 }  catch{ 出错后的处理方法}

   技术分享

技术分享

     有运行结果可以看出 当输入的数字为整数比如“3”时程序没有出错所以执行Console.WriteLine("你输入的是" + i);这句话 输出了“你输入的是3”。 但当输入的是小数或是字母比如“3.2”“h”时 出现了错误 那么程序就跳转到catch中执行Console.WriteLine("你输入的字符格式有误"); 输出 “你输入的字符有误”。

 第二种:try{ 可能出现错误的程序 }  catch(可能出错的地方){出错的处理方法}

技术分享

技术分享

      由上面的结果可以看出:当输入整数“3”时 程序正常执行,但当输入“3.2”“h”时程序不能把他们转化成整数 那么(Exception e)就捕获错误信息并在catch“{}”中进行错误的处理。

 

关于throw的用法可以用这么个例子来简单解释一下:

     A类里面有一个a方法,B类里面有一个b方法,那么我们现在在a方法中调用B类的b方法,但是由于某些原因,b方法有时候会出现一些错误,但是我们不想在b里面处理这个错误,那么我们再b里面可以写一个判断语句

     if(错误的标识出现了)

     {

         throw new IndexOutOfRangeException();//这里的错误类型有很多在后面列出来了,

     }

     然后再程序a中我们可以写一个catch语句来截获这个错误,并作出相应的处理

     Catch(IndexOutOfRangeExceptione)

    {

         MessageBox.Show(“发现IndexOutOfRangeException的错误”);//也可以有其他的处理方式,处理这种提醒式的处理,也可以继续抛出错误,让上一层来处理

     }

错误的种类:

算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException

关于throw和throws

throw 是语句抛出一个异常;throws是方法抛出一个异常;

throw语法:throw <异常对象>

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
其中:异常类可以声明多个,用逗号分割。

 

  • 只要try开始执行了,finally一定会执行.
  • 捕捉到的异常可以重新抛出 ,  re-throwable
  • Try后不一定要有catch块,但是一旦用了try关键字,后边必须有catch或者finally块,或者二者都有

    更多的关于try----catch的用法请转:http://msdn.microsoft.com/zh-cn/library/0yd65esw 

try catch和finally