一、异常分类
二、异常种类
声明式异常(自动处理异常):用throws捕捉到异常类型,将捕捉异常的任务交给xml配置文件,进行处理。
编程式异常(手动处理异常):自己try….catch掉,在这之中进行处理
三、异常解释
1、Throwable
Throwable类是Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java虚拟机或者 Javathrow语句抛出。类似地,只有此类或其子类之一才可以是catch子句中的参数类型。两个子类的实例,Error和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。
2、Exception
Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。
3、Error
Error是Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。
4、RuntimeException
RuntimeException是那些可能在 Java虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。
5、ThreadDeath
调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个hreadDeath实例。仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果ThreadDeath被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。如果没有捕获 ThreadDeath,则顶级错误处理程序不会输出消息。虽然 ThreadDeath类是“正常出现”的,但它只能是 Error 的子类而不是Exception的子类,因为许多应用程序捕获所有出现的Exception,然后又将其放弃。
四、异常处理关键字
try、 catch、 finally、 throw和throws
特别注释:throw和throws关键字的区别:
throw用来抛出一个异常,在方法体内。语法格式为:throw异常对象。
throws 用来声明方法可能会抛出什么异常,在方法名后,语法格式为: throws 异常类型 1 ,异常类型 2... 异常类型 n 。
五、Java异常处理的原则和技巧
1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。
2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。
3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。
4、不要把自己能处理的异常抛给别人。
5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。