1、 什么是异常?
1、程序运行时发生的错误。(错误的出现并不总是程序员的原因,有时应用程序会因为最终用户或运行代码的环境改变而发生错误。比如:1、连接数据库时服务器停电了;2、操作文件时文件没了、权限不足等;3、计算器用户输入的被除数是0;4、使用对象时对象为null;等等)
2、.net为我们把“发现错误(try)”的代码与“处理错误(catch)”的代码分离开来。
2、异常处理的一般代码模式:
1、try{…可能发生异常的代码…} catch{…对异常的处理…} finally{…无论是否发生异常、是否捕获异常都会执行的代码…}
2、try块:可能出问题的代码。当遇到异常时,后续代码不执行。
3、catch块:对异常的处理。记录日志(log4net),继续向上抛出等操作。(只有发生了异常,才会执行。)
4、finally块:代码清理、资源释放等。无论是否发生异常都会执行。
3、案例:int x=5;int y=0;int z=x/y; 程序运行时出错,后续的内容无法运行。
4、程序一旦有一个功能发生异常,整个程序崩溃其他功能也无法正常运行。
5、 错误的几种形式:
1、 语法错误:语法错误一般编译器会帮我们解决。
2、 逻辑错误:编译没问题,执行不报异常,就是结果不对。
3、异常:在运行时发生的错误,异常一般会导致程序崩溃。
A、 空指针异常:未将对象引用设置到对象的实例。
Person p=new Person();
P=null;
p.Name=”yzk”;
Console.WriteLine(P.Name);
Console.ReadKey();
B、 试图除以零异常:除数不能为0。
Int n=10;
Int m=0;
Int sum=n/m;
Console.WriteLine(sum);
Console.Readkey();
C、 输入字符串的格式不正常
string str=”abcd”;
int n=Convert.ToInt32(str);
Console.WriteLine(n);
Console.ReadKey();
6、 catch块的三种写法
A、 第一种写法,这种写法可以捕获所有的异常。
Catch
{
Console.WriteLine(“异常了。”);
}
B、 第二种写法,如果参数类型是:Exception,表示可以捕获所有的异常。
catch(Exception ex)
{
Console.WriteLine(“异常了。{0}”,ex.Message);
}
C、 第三种写法:根据参数类型的不同,可以捕获不同的异常。如参数类型是:NullReferenceException,表示只能捕获空指针异常。
Catch(NullReferenceException ex)
{
Console.WriteLine(“异常了。{0}”,ex.Message);
}
注:捕获所有异常的catch不能写在具体异常前面。
Exception类是所有异常类的祖宗类。
7、 异常处理代码的其他几种形式:
A、 try->多个catch->一个finally
B、 try->(1个或多个catch),多个catch的顺序问题。没有finally。
C、 try->finally(只能有一个),没有catch也可以。
注意点:
A、 发生异常后,try块中,异常代码后的代码不会执行。
B、 finally块中的代码,无论是否发生异常都会执行。
C、 finally中不能写return语句。
D、 try中有return语句,finally也会执行。
E、 即便没有catch,finally中的代码也会执行,但finally之后的代码则不会。
8、 Exception ex异常也是对象,封装了异常发生时的一些信息。
9、 Exception类主要属性:Message、StackTrace、InnerException
10、 扔出自己的异常,扔:throw。抓住:catch
建议:通过逻辑判断(if-else)减少异常发生的可能性。
详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>
原文:http://www.cnblogs.com/zxh930508/p/3544405.html