异常类型结构图
在Java中,所有的异常都有一个公共祖先java.lang包中的Tgrowable类,有两个重要的子类Exception(异常)和Error(错误).
Error:是程序无法处理的错误.一般是代码运行时JVM出现的问题,不能手动解决 .
Exception(异常):是程序本身可以处理的的异常,RuntimeException由虚拟机抛出,可以被程序本身处理.
Throwable类的主要方法
- public String getMessage(): 返回异常发生时的详细信息
- public String toString(): 返回异常发生时的简要描述
- public String getLocalizedMessage(): 返回异常对象的本地化信息,可以用子类覆盖该方法,如果没有覆盖,则返回的信息与getMessage()方法相同.
关键字
try块:用于不会异常,后面可跟多个catch块,如果没有catch块,则必须跟一个finally块
try {
//存放可能发生异常的代码
}catch(ArrayIndexOutOfBoundsException E){ //捕捉异常对象
}catch(NullPointException e){
}
catch块:用于处理try捕获到的异常
- 不要过度细分异常 //基类引用 引用派生类对象
- 多个catch 并列的情况 ,先抓子类异常对象,然后再抓父类对象
throw(扔异常对象)
- 方法名后面直接扔出异常,交给调用它的方法执行
void fun()throws 异常类名1,异常类名2{
}
finally块:无论是否捕获或者处理异常,finally块的内容都会执行
- 当在try块与catch块中遇到return语句中时,finally语句块会在方法返回前执行.
- finally不会执行的情况<一> :在前面的代码中用了System.exit(int)已退出程序。这种情况时直接杀死了进程.finally不执行.
- finally不会执行的情况<二>: 线程被杀死
关于返回值:
如果try语句里有return,返回的是try语句块中变量值。 详细执行过程如下:
- 如果有返回值,就把返回值保存到局部变量中;
- 执行jsr指令跳到finally语句里执行;
- 执行完finally语句后,返回之前保存在局部变量表里的值。
- 如果try,finally语句里均有return,忽略try的return,而使用finally的return.