Throwable 是所有 Java 程序中错误处理的父bai类 ,有两种资类: Error 和 Exception
- Error :表bai示由 JVM 所侦测du到的无法预期的错误,由zhi于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
- Exception :表示可恢复的例外,这是可捕捉到的。
- 区别:error表示恢复不是不可能但很困难的情况下的一种严重问题。 比如说内存溢出。不可能指望程序能处理这样的情况。exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
- Exception表示程序表示程序还能够克服和恢复的一种严重问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
Exception
Exception分为两类,一为runtimeexception(运行时异常),另一类为checkedexception(检查时异常)或者非runtimeexception(非运行时异常)
RuntimeException
是RuntimeException类及其子类异常,就是我们在开发中测试功能时程序终止,控制台出现的异常,比如:
NullPointerException(空指针异常)、
IndexOutOfBoundsException(下标越界异常)
ClassCastException(类转换异常)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
IO操作的BufferOverflowException异常
非运行时异常
.checked exceptions,非运行时异常(编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
常见的RuntimeException
通俗的话说就是在写代码时出现红线,需要try catch或者throws时出现的异常。
ArithmeticException——由于除数为0引起的异常;
ArrayStoreException——由于数组存储空间不够引起的异常;
ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常;
IllegalMonitorStateException——监控器状态出错引起的异常;
NegativeArraySizeException—一数组长度是负数,则产生异常;
NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常; OutofMemoryException——用new语句创建对象时,如系统无法为其分配内存空 间则产生异常;
SecurityException——由于访问了不应访问的指针,使安全性出问题而引起异常;
IndexOutOfBoundsExcention——由于数组下标越界或字符串访问越界引起异常;
ClassNotFoundException——未找到指定名字的类或接口引起异常;
CloneNotSupportedException——一程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常;
InterruptedException—一当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述;
NoSuchMethodException一所调用的方法未找到,引起异常;
Illega1AccessExcePtion—一试图访问一个非public方法;
StringIndexOutOfBoundsException——访问字符串序号越界,引起异常;
ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;
NumberFormatException——字符的UTF代码数据格式有错引起异常;
IllegalThreadException—一线程调用某个方法而所处状态不适当,引起异常;
FileNotFoundException——未找到指定文件引起异常;
EOFException——未完成输入操作即遇文件结束引起异常。
异常处理方式
异常处理方式主要有2种:第一种为try-catch-finally
- try 用于检查其语句代码块是否有异常,如果有异常则进入catch语句块
- finally语句块,无论是否出现异常都会执行
- 一个try语句块可以有多个分支,当同时有多个异常时,就近原则
-
注意:有多个catch时,注意catch语句块必须从小到大例如下段代码中先catch(NullPointException e),然后再catch(RuntimeException e).
-
举例,如下边代码,取决于出现的异常到下边哪一个最接近,最匹配,若无catchArithmeticException则会执行运行时异常
try{
//System.out.println(1/0);
//String str = null;
//System.out.println(str.length());
Class.forName("sssa");
}catch(NullPointerException e){ //捕获空指针异常
System.out.println(e);}
catch(RuntimeException e){
System.out.println("运行时异常\n"+e);
}finally {
System.out.println("无论是否有异常都执行");
}