java异常处理的类
所有lang包中的类
常用的类和继承继承结构
可以看到这些类都直接或者间接继承自java.lang.Throwable类。当然有些子类非常不常用。一个类职业是Throwable类的子类才能够被异常处理机制识别。
java.lang.Throwable
主要子类
java.lang.Throwable类有两个直接子类:java.lang.Error,java.lang.Exception
主要方法
构造器:
方法 | 描述 |
---|---|
Throwable() | 无参数构造方法 |
Throwable(String message) | 用指定的详细信息message构造一个新的throwable。 message- 详细消息。 详细消息被保存以供以后通过getMessage()方法检索。 |
Throwable(String message, Throwable cause) | 用指定的详细信息message和Throwable类型的cause构造一个新的throwable。 message- 详细消息(保存以供以后通过getMessage()方法检索)。 cause- 原因(保存以供以后通过getCause()方法检索)。 (空值是允许的,并指出原因不存在或未知。) |
protected Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) | 四个参数的构造方法 message - 详细消息。 详细消息被保存以供以后通过getMessage()方法检索。 cause - 原因。 (空值是允许的,并指出原因不存在或未知。) enableSuppression - 是否启用或禁用抑制 writableStackTrace - 堆栈跟踪是否可写 |
Throwable(Throwable cause) | 构造一个具有指定原因和(cause == null?null:cause.toString())(通常包含原因的类和详细消息)的详细消息的新throwable。 cause - 原因。 (空值是允许的,并指出原因不存在或未知。) |
所有方法:
类型 | 方法名称 | 方法描述 |
---|---|---|
void | addSuppressed(Throwable exception) | 将指定的异常附加到为了传递此异常而被禁止的异常。 |
Throwable | fillInStackTrace() | 填写执行堆栈跟踪。 |
Throwable | getCause() | 返回此throwable的原因,如果原因不存在或未知,则返回null。 |
String | getLocalizedMessage() | 创建这个throwable的本地化描述。 |
String | getMessage() | 返回此Throwable的详细详细 |
StackTraceElement[] | getStackTrace() | 提供对由printStackTrace()打印的堆栈跟踪信息的编程访问。 |
Throwable[] | getSuppressed() | 返回包含所有被压缩的异常的数组(通常由try-with-resources语句),以便传递此异常。 |
Throwable | initCause(Throwable cause) | 将此throwable的原因初始化为指定的值。 |
void | printStackTrace() | 打印这个throwable和它的backtrace到标准的错误流。 |
void | printStackTrace(PrintStream s) | 将这个throwable和它的backtrace打印到指定的打印流。 |
void | printStackTrace(PrintWriter s) | 将这个throwable和它的backtrace打印到指定的PrintWriter 。 |
void | setStackTrace(StackTraceElement[] stackTrace) | 设置将由getStackTrace()返回并由printStackTrace()和相关方法打印的堆栈跟踪元素。 |
String | toString() | 返回这个Throwable的一个简短的描述 |
java.lang.Error(程序无法处理的错误)
所有方法:
java.lang.Error的所有构造方法,以及普通方法都来自java.lang.Throwable,没有添加新的方法。
使用场景
程序出现无法处理的错误,这些错误大多是编译时和系统错误,和程序的本身没有关系,不能够被程序员通过代码处理,比如OutOfMemoryError。
java.lang.Exception(程序可以处理的异常)
所有方法:
java.lang.Exception的所有构造方法,以及普通方法都来自java.lang.Throwable,没有新添加的方法。
使用场景
在出现了除数为0(ArithmeticException)、空引用(NullPointerException)、数组(ArrayIndexOutOfBoundException)等情况。
检查异常和非检查异常
种类
非检查异常:
黄色部分都是非检查异常(Error和RuntimException以及他们的子类)
javac编译器在编译时不会检查和提示这样的异常,这里可以加入try_catch_finally
也可以不加。非检查异常大部分是代码本身的问题,需要程序员检查代码。
检查异常:
绿色部分都是检查异常
javac强制要求程序员为此类异常做出预处理工作,方式就是直接加入try_catch_finally
进行捕获,或者加入throws语句抛出异常,否则无法通过编译。