Error异常html
Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种状况下应用程序只能停止运行,例如JAVA 虚拟机出现错误。Error是一种unchecked Exception,编译器不会检查Error是否被处理,在程序中不用捕获Error类型的异常。通常状况下,在程序中也不该该抛出Error类型的异常。程序员
RuntimeException异常数据库
Exception异常包括RuntimeException异常和其余非RuntimeException的异常。RuntimeException 是一种Unchecked Exception,即表示编译器不会检查程序是否对RuntimeException做了处理,在程序中没必要捕获RuntimException类型的异常,也没必要在方法体声明抛出RuntimeException类。RuntimeException发生的时候,表示程序中出现了编程错误,因此应该找出错误修改程序,而不是去捕获RuntimeException。编程
Checked Exception异常函数
Checked Exception异常,这也是在编程中使用最多的Exception,全部继承自Exception而且不是RuntimeException的异常都是checked Exception,上图中的IOException和ClassNotFoundException。JAVA 语言规定必须对checked Exception做处理,编译器会对此做检查,要么在方法体中声明抛出checked Exception,要么使用catch语句捕获checked Exception进行处理,否则不能经过编译。spa
为何要在声明方法抛出异常?设计
方法是否抛出异常与方法返回值的类型同样重要。假设方法抛出异常却没有声明该方法将抛出异常,那么客户程序员能够调用这个方法并且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。code
为何抛出的异常必定是已检查异常?RuntimeException与Error能够在任何代码中产生,它们不须要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。遇到Error,程序员通常是无能为力的;遇到RuntimeException,那么必定是程序存在逻辑错误,要对程序进行修改;只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。而已检查异常是由程序员抛出的,这分为两种状况:客户程序员调用会抛出异常的库函数;客户程序员本身使用throw语句抛出异常。htm
注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,因此,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样作的目的就是为了方便子类方法覆盖父类方法时能够抛出异常。对象
使用finally块释放资源
finally关键字保证不管程序使用任何方式离开try块,finally中的语句都会被执行。在如下三种状况下会进入finally块:
(1) try块中的代码正常执行完毕。
(2) 在try块中抛出异常。
(3) 在try块中执行return、break、continue。
所以,当你须要一个地方来执行在任何状况下都必须执行的代码时,就能够将这些代码放入finally块中。当你的程序中使用了外界资源,如数据库链接,文件等,必须将释放这些资源的代码写入finally块中。
必须注意的是:在finally块中不能抛出异常。JAVA异常处理机制保证不管在任何状况下必须先执行finally块而后再离开try块,所以在try块中发生异常的时候,JAVA虚拟机先转到finally块执行finally块中的代码,finally块执行完毕后,再向外抛出异常。若是在finally块中抛出异常,try块捕捉的异常就不能抛出,外部捕捉到的异常就是finally块中的异常信息,而try块中发生的真正的异常堆栈信息则丢失了。
异常处理要害字
Java的异常处理是经过5个要害字来实现的:try,catch,throw,throws,finally。JB的在线帮助中对这几个要害字是这样解释的:
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
Try: Opening exception-handling statement.
Catch: Captures the exception.
Finally: Runs its code before terminating the program.
try语句
try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。
catch语句
catch语句的参数相似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕捉,大括号中包含对象的处理,其中能够调用对象的方法。
catch语句能够有多个,分别处理不一样类的例外。Java运行时系统从上到下分别对每一个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型彻底一致或者是它的父类,所以,catch语句的排列顺序应该是从非凡到通常。
也能够用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的状况来选择catch语句的例外处理类型。
finally语句
try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。经过finally语句能够指定一块代码。不管try所指定的程序块中抛弃或不抛弃例外,也不管catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。一般在finally语句中能够进行资源的清除工做。如关闭打开的文件等。
throws语句
throws老是出如今一个函数头中,用来标明该成员函数可能抛出的各类异常。对大多数Exception子类来讲,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。假如异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起做用, 由于这在程序的正常部分中是不期待出现的。 假如你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。
throw语句 throw老是出如今函数体中,用来抛出一个异常。程序会在throw语句后当即终止,它后面的语句执行不到,而后在包含它的全部try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。 资料引用:http://www.knowsky.com/365353.html