1.什么是异常
在java运行程序时,常常会出现一些非正常的现象,这种情况称为运行错误。根据其性质可以分为错误或异常。
java程序中,所有抛出的异常都必须从Throwable类派生而来。类Throwable有两个直接子类Error和Exception。
一般来说,最常见的错误有进入死循环、内存泄漏等。这种情况,程序运行时本身无法解决。只能通过其它程序干预。
java对应的类为Error类。Error类对象由java虚拟机生成并抛弃(通常不需要对这类异常进行捕获处理。)
java异常对应的类为Exception类。Exception类对象是java程序处理或抛弃的对象,它有各种不同的子类分别对应于不同类型的异常。
java编译器要求程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做任何处理。
类RuntimeException代表java虚拟机生成的异常,原因是编程错误。其他是非运行时异常,原因是程序碰到了意外情况,如
IOException等。
按javac对异常的处理,我们将异常分为两类:检查异常、非检查异常。
检查异常:除了Error和RuntimeException的其他异常。这些异常通常是由于程序的运行环境所引起的。程序可能会被运行于各种复杂的环境,程序员无法干预用户如何使用他的程序,因此程序员需要时刻为这样的异常准备着。如SQLException、IQException、ClassNotFoundException等。
非检查异常:Error和RuntimeException异常以及它们的子类。javac在编译时,不会提示和发现这样的异常。这些异常是由于编程错误引起的,我们应该通过修改程序去处理,而不是通过异常编译器去处理。
2.异常丢失
造成异常丢失的两种情况:
a.finally 里面写return语句
b.finally 里面写throw异常