目录
一、异常继承体系
- 异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类
java.lang.Throwable
作为所有异常的超类。 Throwable
: 它是所有错误与异常的超类(祖宗类),有两个子类Error
和`Exception- Error
: 错误。程序无法处理的错误,比如
OutOfMemoryError、
ThreadDeath等。这些异常发生时,**Java虚拟机(JVM)一般会选择线程终止**。
Exception `: 异常。程序本身可以处理的异常,程序中应当尽可能去处理这些异常。 RuntimeException
: 运行期异常, JAVA程序运行过程中出现的问题CheckableException
: 编译时异常或者可检查异常, 是除了`RuntimeExecption(及其子类)之外的所有 Exception
运行时期异常:
方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常
运行时期异常一旦发生,需要程序人员修改源代码.
编译时异常: 必须在编译前处理,否则无法通过编译
二、发生异常到时候,程序的执行特征:
- 我们的代码,从发生异常的地方,开始被一分为二
- 在异常发生之前的代码,都可以正常运行,之后的代码不会执行
- 当异常发生的时候,这个异常被** jvm 所捕获**,并将这个异常的所有相关信息,创建为一个异常对象,然后将该异常对象的信息输出到控制台(执行的是虚拟机默认的异常处理代码)
- 终止当前程序
三、异常与错误的区别
- 异常:指程序在编译、运行期间发生了某种异常(XxxException),我们可以对异常进行具体的处理。若不处理异常,程序将会结束运行。
- 错误:指程序在运行期间发生了某种错误(XxxError),Error 错误通常没有具体的处理方式,程序将会结束运行。Error错误的发生往往都是系统级别的问题,都是jvm所在系统发生并反馈给jvm的。我们无法针对处理,只能修正代码。
四、抛出异常 throw
- 在 java 中,提供了一个throw关键字,它用来抛出一个指定的(Throwable类型)异常对象.
- 一般会用于程序出现某种逻辑时,程序员主动抛出某种特定类型的异常
- 具体步骤:
- 创建一个异常对象, 封装一些提示信息(信息可以自己编写).
- 通过关键字throw, 将这个异常对象告知给调用者.
- throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
- 使用格式:throw new 异常类名(参数);
throw new NullPointerException("要访问的arr数组不存在");
throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");
//具体范例:
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
//function();
}
- 注意事项:
- 如果抛出的异常对象属于可检查的异常,必须在该方法头部,声明抛出此异常, 即: throws 要抛出的异常类型
- 其次,对于抛出可检查的异常,还必须与方法的异常列表中的异常兼容
- 如果父类方法声明了异常列表:
- 子类可以不声明异常列表
- 子类方法有自己异常列表时,必须保证,子类的异常列表所包含的异常类型,与父类中所包含的异常类型兼容
五、声明异常 throws
- 声明:将问题标识出来,报告给调用者
- throws 是方法可能抛出异常的声明, 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明。
- 对于声明了会抛出可检查异常的方法, 就意味着这个方法会产生可检查异常,所以,一旦调用该方法就必须对该方法做异常处理
- throws用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。
- 声明异常格式:修饰符 返回值类型 方法名(参数) throws <异常列表> { }
public static void function() throws NumberFormatException{
String s = "abc";