一、Thrownable
是java中的顶级异常类,继承至Object,实现了序列化接口,有两个重要的子类:Exception
和Error
,二者都是java中处理异常的子类,各自都包含大量的子类。
1、Error
是表示系统级别的错误,是java运行环境内部或者硬件错误,不能指望程序员来处理这类问题,除了退出程序之外,没有其他选择,这是java虚拟机抛出的。
2、exception
表示程序还能够克服和恢复的问题,程序需要捕捉,需要处理的异常,是由程序设计的不完善而出现的问题,程序必修处理的问题。
二、Exception的分类
Exception的主要分为两大类。即受检查异常(checked exception)和非受检查异常(unchecked exception)。
- 非受检查异常,这种一般来说是继承自RuntimeException。在编写代码的时候,不需要显示的捕获,在运行时期,如果发生异常会中断程序的执行,这种异常一般理解是由于代码原因导致的,问题是可以避免的,所以需要我们显示的处理问题。
- 检查异常 这是一种一定要对其进行处理的异常,否则编译将无法通过。常见的
FileNotFounException
。处理方式有两种:- 1 当前方法知道如何处理该异常,则用 try…catch 块来处理该异常
- 2 当前方法不知道如何处理,则在定义该方法是声明
Throws
抛出该异常。(由后面调用该方法的方法来处理)
三、throw 和 throws 的区别
throw :
1) Throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
2) throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常
throws
1) throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
2) throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
3) throws 表示出现异常的一种可能性,并不一定会发生这种异常
四、常见RuntimeException
1) java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象
2) java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序
试图通过字符串来加载某个类时可能引发异常。
3) java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字符串
4) java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生
5) java.lang.IllegalArgumentException 方法传递参数错误
6) java.lang.ClassCastException 数据类型转换异常。
7) java.lang.NoClassDefFoundException 未找到类定义错误
8) SQLException SQL 异常,常见于操作数据库时的 SQL 语句错误。
9) java.lang.InstantiationException 实例化异常
10) java.lang.NoSuchMethodException 方法不存在异常
五、异常处理的几个关键字
throws
:用来声明
一个方法可能抛出的各种异常。
throw
:用来明确得抛出一个具体的异常。
try
:用来指定一块所有预防异常的程序。
catch
:跟在try
指定你想要捕获异常的类型。
finally
:确保一段代码不管发生什么异常情况都能够被执行
六、什么是异常链
异常链
是java中非常流行的处理异常的概念,是指在进行一个异常处理的时候抛出了一个另外的异常,所有就产生了一个链条。同时我们的做法是 将受检查异常
封装成一个非受检查异常
,然后抛出。