1. JAVA中异常的定义
异常(Exception) :是指程序在运行中的出现的错误,例如:在进行除法运算时,若除数为0,则运行JAVA是会自动抛出算数异常。
JAVA 异常 :也是通过一个对象来表示的,程序运行时抛出的异常,实际上就是一个异常对象,该对象中不仅封装了错误的信息,还提供了一些处理方法。
2. 异常体系
异常的根类:
在Java中,所有异常和错误都是派生于java.lang.Throwable这个类。只有当对象是此类及其子类的实例时,才能通过Java虚拟机或者Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
java.lang.Throwable下有两个子类:java.lang.Error(错误)与java.lang.Exception(异常),平常所说的异常指java.lang.Exception。
Throwable -- Error
|_ Exception -- ClassNotFoundException
|_ IoException -- FileNotFoundException
|_ RuntimeException -- ArithmeticException
|_ ArrayIndexOutOfBoundsException
|_ ClassCastException
|_ NullPointerException
|_ ......
异常和错误的区别是:
异常能被程序本身可以处理,错误是无法处理。
Throwable是 Java 语言中所有错误或异常的超类。包含了其线程创建时线程执行堆栈的快照,它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。
Throwable常用API
public void printStackTrace() // 打印异常的详细信息。包含了异常的类型,异常的原因,还包括异常出现的位置。
public void printStackTrace(PrintStream s) // 通常用该方法将异常内容输出到日志文件中,以便查看,类似于重定向。
public String getMessage() // 获取发生异常的原因,返回字符串。
public String toString() // 获取异常的类型和异常描述信息,返回字符串。
3. 常见的异常类列表
异常类名称 | 异常类含义 |
---|---|
ArithmeticException | 算术异常类 |
ArraylndexOutOfBoundsException | 数组下标越界异常 |
ArrayStoreException | 将与数组类型不兼容的值赋值给数组元素时抛出的异常 |
ClassCastException | 类型强制转换异常 |
ClassNotFoundException | 未找到相应的异常类 |
EOFException | 文件结束异常 |
FileNotFoundException | 文件未找到异常 |
illegalAccessException | 访问某类被拒绝时抛出的异常 |
IndexOutOfBounchsException | 当某对象的索引超出范围时抛出异常 |
InstantiationException | 试图通过new Instance()方法创建一个抽象类或抽象接口的实例时出现的异常 |
IOException | 输入输出异常 |
NegativeArraySizeException | 数组负下标异常 |
NoSuchFileException | 字段未找到异常 |
NoSuchMethodException | 方法未找到异常 |
NullPointException | 空指针异常 |
NumberFormatException | 字符串转换为数字异常 |
OutOfMemoryException | 分配给新对象的内存太小 |
ProtocolException | 网络协议有错误 |
SecurityException | Applet试图执行浏览器的安全设置不允许的动作 |
StringIndexOutBounchsException | 程序试图访问字符串中字符不存在的字符位置 |
SockedException | 不能正常完成Socked操作 |
SQLException | 操作数据库异常 |
注意:若不知道代码抛出是那种异常,可以指定它们的父类 Throwable 和 Exception。
4. 异常的处理机制
-
抛出异常(throw/throws)
-
捕获异常(try-catch(finally))
JVM默认的异常处理方式:在控制台打印错误信息,并终止程序
5. 异常的处理流程:
- 如果程序之中产生了异常,那么会自动的由JVM根据异常的类型,实例化一个指定异常类的对象;
- 如果这个时候程序之中没有任何的异常处理操作,则这个异常类的实例化对象将交给JVM进行处理,而JVM的默认处理方式就是进行异常信息的输出,而后中断程序执行
- 如果程序之中存在了异常处理,则会由try语句捕获产生的异常类对象
- 与try之后的每一个catch进行匹配,如果匹配成功,则使用指定的catch进行处理,如果没有匹配成功,则向后面的catch继续匹配,如果没有任何的catch匹配成功,则这个时候将交给JVM执行默认处理
- 不管是否有异常都会执行finally程序,如果此时没有异常,执行完finally,则会继续执行程序之中的其他代码,如果此时有异常没有能够处理(没有一个catch可以满足),那么也会执行finally,但是执行完finally之后,将默认交给JVM进行异常的信息输出,并且程序中断
5. 开发中异常的处理方式:
-
try-catch(finally):捕获,自己处理
-
throws:抛出,交给调用者处理
-
自定义异常类
作者:快乐随行
https://www.cnblogs.com/jddreams/p/14281900.html