Java异常总结
Java把所有可能的错误都归入到异常类的层次结构中,它们的基类是Throwable。在Java中,Throwable类或其子类的对象才能被Java的错误机制处理。
Throwable可以对特定的错误提供较多的信息,通常是一个字符串。类定义如下:
public class Throwable extends Object
{ //构造方法
Throwable() |
Throwable(String message) |
Throwable(String message, Throwable cause) |
Throwable(Throwable cause) |
//其他方法
fillInStackTrace() | |
getCause() | |
getLocalizedMessage() | |
getMessage() | |
getStackTrace() | |
initCause(Throwable cause) | |
void |
printStackTrace() |
void |
printStackTrace(PrintStream s) |
void |
printStackTrace(PrintWriter s) |
void |
setStackTrace(StackTraceElement[] stackTrace) |
toString() |
所有扩充Throwable的类一般应覆盖它的两个构造方法:一个是无输入参数的构造方法,另一个是接受字符串参数的构造方法。
当Java程序遇到不可预料的错误时,会实例化一个Throwable类的子类对象。这个对象将包含对错误的描述信息以及当前引起错误对象的状态。访问该对象,可以将信息和状态输出到控制到。此外,通过正确解释这个对象,程序能够试图捕获这个错误并纠正它,或者至少能够正确地完成清除工作和控制危害。
Trowable类直接派生出连个字类:Exception类和Error类。
Exception类 |
表示一个合理的应用程序产生的可能修复的错误。用于表示一切可以被捕获且可能恢复的异常情况。 |
如果出现在程序中,唯一可以做的是等待程序的崩溃。 |
Error类 |
表示发生严重错误一般是指Java虚拟机相关的问题。这一类错误无法修复或不可能捕获,将导致应用程序中断。 |
可能出现在任何程序中,如果他们出现,程序应该试图纠正它,或者至少返回到程序可识别和可以控制的和状态,并允许程序继续工作。 |
在Exception类型的一场中,有一种异常很常见,就是所谓的运行时异常(Runtime Exception)。再Java中,专门定义了Runtime Exception类,它继承了Exception类,使用try-catch块可以捕获。这类异常若是处理得当,通常可以避免。
通常编程中出现的异常是访问指向空指针的变量或者访问无效的数组元素,须注意:
在访问一个可能没有正确初始化的引用变量前,首先检查它是否指向空值。
当有可能使用一个超过数组范围的下表来访问数组元素时,应该先检查下标变量是否大于数组的最大长度或者是否小于等于零。
隐式和显式异常
一个隐式的错误或异常Implicit Errors是起源于Error类或RuntimeException类。其他类型的异常则被称作显示异常。
隐式异常可能出现在任何类和方法中。在运行时异常的情况下,我们可以有策略地放置if语句来阻止它的产生;但是在Error的情况下,一般没有特别有效的方法阻止它。
Throwable相关的主要类的分类层次关系
Throwable getMessage();toString();printStackTrace(); | |||
Error |
Exception | ||
|
RuntimeException |
IOException |
InterruptedException |
Inplicit Errors |
Explicit Errors |
包含在java.lang中的异常
比较常见的异常类 |
异常类的含义 |
ArithmaticException |
算术运算时发生的异常 |
ArrayIndexOutOfBoundsException |
使用非法下标访问数组 |
ArrayStoreException |
企图把一个错误类型的对象存入数组中 |
ClassCastException |
试图将一个对象转换成并非它的子类的实例 |
IllegalArgumentException |
传递了一个错误的参数给某个方法 |
IllegalThreadStateException |
对于被要求的操作,线程没有出在一个合适的状态 |
InterruptedException |
一个线程正在等待,休眠或者暂停了很长时间,而另一个线程使用Thread类的中断方法中断了它 |
NoSuchFiledException |
表明类中没有这个特定名字的域 |
NoSuchMethodException |
没有发现某个特定的方法 |
NullPointerException |
当需要引用一个对象时,应用程序试图使用空对象 |
NumberFormatException |
试图把一个不合法的字符串转化成数值类型 |
SecurityException |
表明违法安全规则 |
StringIndexOutOfBoundsException |
字符串的下标值为负,或大于等于字符串的长度 |
这些异常基本上是可以防止的,因为它们其中很大部分都继承了RuntimeException。
java.awt包也包含一些异常类,但这些异常很少发生。
异常类 |
异常类的定义 |
AWTException |
一个抽象窗口工具集异常出现 |
IllegalComponentException |
对于要求的操作,AWT组件没有处于一个合适的状态 |
java.io中的异常与I/O操作有关,通常发生在从磁盘或者连接的网络上读取数据的时候。一般无法阻止它们的发生,但是可以阻止它们产生更大的破坏。
异常类 |
异常类的定义 |
EOFException |
在读取数据时,指针已达到文件或流的尾部。通常数据输入流使用这种异常,而其他的输入流一般在到达流的尾部时范围一个特殊值。 |
FileNotFoundException |
文件无法找到 |
IOException |
某种类型的I/O异常发生 |
InterruptedIOException |
I/O操作被中断 |
包java.net中的异常
异常类 |
异常类的定义 |
ConnectException |
当试图连接远程地址或端口时,连接请求被拒绝 |
MalformedException |
创建了一个不正确的URL地址 |
NoRuteToHostException |
当试图连接远程地址或端口时,无法到达远程主机 |
ProctolException |
一些基本的协议错错误,例如TCP错误 |