用异常来处理错误。捕获异常最佳的时候应该是程序编译的时候,也就是程序运行之前,但是不是所有的错误都能在编译的时候被发现,有些问题只有到程序运行的时候才能被处理,他们要通过某种方式,让引发问题的代码将适当的信息传给那些知道该怎么处理这些问题的程序。
基本异常 异常条件是一种能阻止正在运行的方法或其某一部分继续运行下去的问题。 把异常条件同普通问题区分开来,这点很重要,遇到普通问题的时候,你在 当前的运行环境下有足够的信息来处理这个困难,对于异常条件,由于你得不到 足够得用以处理这个问题得信息,因此不能在当前得运行环境下继续运行下去, 你只能跳出当前得运行环境,并且把问题交到上层得运行环境,这就是抛出异常的 时候所发生的事情。
当你抛出异常对象的时候,首先会象创建其他java对象那样,创建一个异常对象, 在堆里,用new ,然后停下当前的执行路径,再将异常对象的reference从当前的运行 环境中弹出去,现在异常处理机制开始接管程序了, 创建自己的异常
异常说明
异常说明属于方法声明的一部分,要列在参数表的后面。 异常说明要用throws关键词语,后面跟上所有可能抛出异常类型的清单。
捕捉任意类型的异常
要想创建一个“能处理任意类型异常的”异常处理程序是完全可能的,要做到这点, 你就必须去捕捉异常的基类Exception,
由于Exception只是那些跟程序员有关的异常类的基类,因此你不能从它那里得到更多的 关于异常的具体信息,不过你也可以调用Exception的基类Throwable的方法,
String getMessage()
String getLocalizedMessage()
String toString()
void printStackTrace() void printStackTrace(PrintStream) void printStackTrace(java.io.PrintWriter)
Throwable fillInStackTrace()
用finally进行清理
你会时常碰到”无论try区块有没有抛出异常“,程序都必须执行的代码。一般来说 这些代码都是执行恢复内存之外的操作的(因为恢复内存是垃圾回收器的活) 当你需要把内存以外的东西恢复到原先状态的时候finally就显得必要了。