Throwable是所有Java程序中错误处理的基类,有两种子类:Error和Exception
- Error:表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行,例如JAVA虚拟机出现错误。在程序中不用捕获Error类型的异常。一般情况下,在程序中也不应该抛出Error类型的异常
- Exception:表示可恢复的例外,这是可捕捉到的
- checked exception:是相对于Unchecked Exception而言的,Java中并没有一个名为Checked Exception的类。它是在编程中使用最多的Exception,所有继承自Exception并且不是RuntimeException的异常都是Checked Exception。JAVA 语言规定必须对checked Exception作处理,编译器会对此作检查,要么在方法体中声明抛出checked Exception,要么使用catch语句捕获checked Exception进行处理,不然不能通过编译。常用的Checked Exception有IOException、ClassNotFoundException等
- runtime exception:是一种Unchecked Exception,即表示编译器不会检查程序是否对RuntimeException作了处理,在程序中不必捕获RuntimException类型的异常,也不必在方法体声明抛出RuntimeException类。一般来说,RuntimeException发生的时候,表示程序中出现了编程错误,所以应该找出错误修改程序,而不是去捕获RuntimeException。常见的RuntimeException有NullPointException、ClassCastException、IllegalArgumentException、IndexOutOfBoundException等。
正确地处理异常
- 针对不用的异常采取合适的、正确的异常处理方式,不要遇到任何异常都printTrace()或者打印一个日志
- catch时指定具体的异常。不要一股脑地catch Exception,具体的异常应该单独catch住,越具体的异常越早catch
- 涉及到资源时,需要finally。如果涉及到资源的关闭时,应该将关闭资源的代码写在finally代码块内
- 最小化try{ } catch{ }范围。try的范围应该尽量小,最好就是try住抛出异常的那个方法即可