第四十课 异常处理(3)
JAVA中的异常类主要来源于派生自Object类的Throwable类,其结构如下:
Thorwable类是所有异常和错误的父类,所有能够抛出并且能够被控制的异常和错误都必须从这里继承,这的定义格式为:
Public class Throwable extends Object implements Serrializable
这里我们可以看到Throwable类是Object类的子类,并且实现了接口Serializable
Thorwable类有public Throwable()和public Throwable(String message)两个构造函数,一个没有参数,一个有参数(可以通过getMessage()得到具体内容)。
基本方法:
getMessage():用来返回带参数的构造函数创建异常时的参数内容
toString():返回异常所属的异常类名
printStackTrace():在输出设备上打印出堆栈使用轨迹
fillInStackTrace():主要在异常重新抛出时使用
Throwable类派生出Error和Exception两个类
Error:是不能恢复的严重错误(如资源耗尽)
Exception:认为是轻微的错误
RuntimeException:编程错误导致的,如被除零等
非RuntimeException:意外情况而发生的,如试图打开错误的URL等
=======================常见异常处理=====================
ArithmeticException 由于除0引起的异常
ArrayStroeException 由于数组存储空间不够引起的异常
ClassCastException 把一个对象归于某个类,但实际上此对象不是该类创建的,也不是该
类的子类创建的
IllegalMonitorStateException 监控器状态出错引起的异常
NegativeArraySizeException 数组长度是负数
NullPointerException 程序试途访问一个空数组中的元素或者空对象中的方法或者变量
OutOfMemoryException 使用NEW操作符时,系统无法为其分配内存
SecurityException 访问了不应访问的指地,使用安全性出现问题
IndexOutOfBoundsException 数组下标越界或字符串访问越界
IOException 由于文件未找到、未打开或者I/O操作不能进行
ClassNotFoundException 未找到指定名字的类或者接口引起的
CloneNotSupportException 一个对象引用Object的clone方法,但该对象没有实现cloneable
接口引起的
InterruptedException 当一个线程处于等待状态,另一个线程试图终止该线程引起的
NoSuchMethodException 所调用的方法没找到引起的
IllegalAcessException 试途访问一个非public方法引起的
StringIndexOutOfBoundsException 访问字符串序号越界
ArrayIndexOutOfBoundsException 访问数组元素下标越界
NumberFormatException 字符的UTF代码数据格式有错引起的异常
IllegalThreadException 线程调用某个方法而所处的状态不适当引起的
FileNotFoundException 为找到指定文件引起的
EOFException 为完成输入操作,由于文件结束引起的
Exception类是异常类的祖先类,所有能捕获的类都是从它派生出来的,我们自己定义的异常类一般也定义成它的子类,当然也同时继承了Throwable类的那些重要方法。可以创建一个控制器,令其捕获所有类型的异常。如:
Catch(Exception e){
System.out.println(“caught an exception”);
}
这段代码可以捕获任何异常,所以最好将它置于控制器列表的未尾,防止跟随在后面的异常类控制器失效。
有些情况下,这种异常需要人为来抛出,因为这些异常是可以预见发生的,下面我们看一个人为抛出的例子
class JavaThrow{
public static void main(String args[]){
try{
throw new ArithmeticException();
}
catch(ArithmeticException a){
System.out.println(a);
}
try{
throw new ArrayIndexOutOfBoundsException();
}
catch(ArrayIndexOutOfBoundsException b){
System.out.println(b);
}
try{
throw new StringIndexOutOfBoundsException();
}
catch(StringIndexOutOfBoundsException c){
System.out.println(c);
}
}
}
在输出的结果中,我们看到:
java.lang. ArithmeticException
java.lang. ArrayIndexOutOfBoundsException
java.lang. StringIndexOutOfBoundsException