在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