Java异常和错误的基类是Throwable类,它是所有可抛出异常的超类,包括异常和错误。
public class Throwable { private String message; private Throwable cause; public Throwable() { fillInStackTrace(); } protected Throwable(String message, Throwable cause) { fillInStackTrace(); this.message = message; this.cause = cause; } protected Throwable(String message) { fillInStackTrace(); this.message = message; } public String getMessage() { return message; } public Throwable getCause() { return cause; } public void printStackTrace() { printStackTrace(System.err); } public void printStackTrace(PrintStream s) { printStackTrace(new PrintWriter(s)); } public void printStackTrace(PrintWriter s) { s.println(this); s.println("\t... 以下省略"); } public String toString() { String s = getClass().getName(); String message = getMessage(); return (message != null) ? (s + ": " + message) : s; } public native Throwable fillInStackTrace(); }
Throwable类的三个子类是Error、Exception和RuntimeException。其中,Error是指其它致命的错误,应用程序无法捕捉,比如VirtualMachineError,OutOfMemoryError;Exception则是程序运行过程中的错误,比如IOException、SQLException等;而RuntimeException,则是程序运行过程中的运行时异常,比如NullPointerException、ClassCastException等。
当程序中出现异常或错误时,可以使用try-catch-finally语句捕捉它们,如下所示:
try { // 可能抛出异常或错误的代码 } catch (Exception e) { // 处理异常 } catch (Error e) { // 处理错误 } finally { // 无论是否有异常或错误,都会执行的代码 }
对于RuntimeException及其子类的错误,一般不需要捕捉,因为它们是由程序员编写不严谨的代码所引起的,需要程序员自行修正;而对于Exception及其子类和Error及其子类的错误,则需要进行捕捉和处理,以避免程序崩溃。