首页 > 技术文章 > 黑马程序员-异常介绍与处理

zxh930508 2014-02-11 14:56 原文

 

  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)减少异常发生的可能性。

 

推荐阅读