代码改变世界

Java异常机制

2012-03-11 17:20  myjava2  阅读(208)  评论(0编辑  收藏  举报
 

         异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。

         Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。

         1.try:它里面放置可能引发异常的代码

         2.catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。

         3.finally:主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

         4.throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。

         5.throws:用在方法签名中,用于声明该方法可能抛出的异常。

 

       Java的异常分为两种,checked异常(编译时异常)和Runtime异常(运行时异常)

1.       java认为checked异常都是可以再编译阶段被处理的异常,所以它强制程序处理所有的checked异常,而Runtime异常无须处理,java程序必须显式处理checked异常,如果程序没有处理,则在编译时会发生错误,无法通过编译。

2.       checked异常体现了java设计哲学:没有完善处理的代码根本不会被执行,体现了java的严谨性,

         对于构造大型、健壮、可维护的应用系统而言,错误处理是整个应用需要考虑的重要方面。Java异常处理机制,在程序运行出现意外时,系统会生成一个Exception对象,来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。

         如果执行try块里的业务逻辑代码时出现异常,系统会自动生成一个异常对象,该异常对象被提交给运行环境,这个过程被称为抛出(throw)异常。Java环境收到异常对象时,会寻找合适的catch块,如果找不到,java运行环境就会终止,java程序将退出。

         不同的catch块,视为了针对不同的异常类,提供不同的处理方法。

Java的异常类,以及他们的继承关系:

         Throwable():Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

         1.Error(错误):一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。

         2.Exception:Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件

         (1). SQLException:该异常提供关于数据库访问错误或其他错误的信息。

         (2). RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类

         (3).IOException:此类为异常的通用类,它是由失败的或中断的 I/O 操作生成的。

异常对象包含的常用方法:

1.       getMessage();返回该异常的详细描述字符

2.       printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。

3.       printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流

4.       getStackTrace():返回该异常的跟踪栈信息。

 

自定义异常:

         通常情况下,程序会很少自行抛出系统异常,因为异常的类名通常包含了该异常的有用信息,所以在选择抛出什么异常时,应该选择合适的异常类,从而可以明确地描述异常情况,这样程序常常需要定义异常类。

         用户定义异常类,需要基础Exception基类,如果希望定义RuntimeException基类,就应该继承该基类,定义异常类时通常需要提供两种构造器:1,无参的构造器,2,带字符串的构造器,这个字符串作为该异常对象的详细说明,(也就是异常对象的getMessage方法返回值),调用super将字符串参数传给异常对象的message属性,message属性就是异常对象的详细描述信息。

如下:

        


         创建了这个SalException业务异常类之后,就可以用它来封装原始异常,从而实现,对异常的链式处理。

Java 处理机制之后就是java异常处理,下一篇就是java中应用程序对异常的处理。