1、异常机制:
a、异常及其错误:
Throwable
Error
AWTError
IOError
LinkageError
ThreadDeathError
Exception
……
SQLException
IOException
RuntimeException
IndexOutOfBoundException
NullPointerException
ClassCastException
b、Throwable
有个两个最为重要的子类,Exception(异常),Error(错误),
这两者都是处理Java异常的子类,都包涵很多其他的子类。
c、Error:
属于系统级别错误,比如JVM的资源耗尽。比如OutOfMemoryError。
d、Exception:
这个属于程序本身的异常。
RuntimeExcetpion:JVM常用操作引发的异常,比如:NullPointerException
e、Checked:
在编译期间就可以发现的异常,必须在运行之前就处理的异常。
除了RuntimeException及其子类之外,其他的Exception类的子类
都属于该异常,这种异常属于Java编译器会自动检查它,当程序出现
这种异常,要么立即做捕获处理,要么抛出这个异常。
f、UnChecked:
包括RuntimeException及其子类,和错误(Error)。
g、运行时异常:
运行时异常的特点即:java编译器不会自动检查它,当程序出现这种异常时
如果没有使用try...catch语句捕获,也没有使用抛出(throws),那么也能
通过编译器编译。
h、编译异常:
是RuntimeException类之外的异常,类型上都属于Exception
从程序语法角度来讲,是必须处理的异常,如果不处理,编译
就不能通过,比如说SQLException、IOException。
i、异常的处理:
a、抛出异常
一个方法内部出现异常时,
方法创建一场对象并交付运行时系统,
异常对象包含了一场类型和异常时的程序状态以及异常信息
运行时系统负责找寻处置异常的代码并执行。
throws:如果一个方法可能会出现异常,但是它也没有能力去处理这个异常(没有能力去处理这个异常是指在面向对象的时候这个对象本身没有处理这个异常的能力,而不是不能用代码处理这个异常 例如:在写汽车这个对象的时候,汽车轮子掉了为异常,这个时候就需要有一个修车厂的对象,汽车把轮子掉了这个异常抛给修车厂其处理,当然我们也可以直接在汽车这个对象中写出处理这个异常的逻辑,但是实际上汽车是不会自己修复的,如果把这个异常的修复直接在车的这个对象中处理,就不符合面向对象了,这就是没有能力去处理这样异常。)
这时可以选择抛出异常,交于其他方法处理。
b、捕获异常
try...catch...finally...
Java规定:对于可查异常,必须捕获、或者声明抛出。
允许忽略的是RuntimeException异常以及Error。
try:属于异常的捕获,一个try块后面可以跟多个catch块,如果没有catch块,
那么必须跟要给finally块。也就是说:try块后不能既没有catch块,也没有finally块, 但是try块后边可以跟0~N个catch块。
catch:属于处理try块中捕获到的异常。
finally:无论是否捕获到了异常,finally块总会执行。
在以下几种情况中,finally块也不会执行:
1) 在finally块中发生了异常。
2) try或者catch代码块中,使用了System.exit(int);
3) 执行程序时的电脑突然断电了。
getCause():返回抛出异常的原因,如果cause不存在或者为空,
则返回null;
getMessage():返回异常的消息描述。
printStackTrace():打印异常的栈的信息。