异常分类
jdk中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。
Exception
所有异常类的父类,其子类对应了各种各样可能出现的异常事件。
Runtime Exception(unchecked Exception)
一类特殊的异常,如被0除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将他们交给缺省的一场处理程序(用户可不必对其处理)
常见的Runtime Exception
ArithmeticException,NullPointerException,ClassCastException,ArrayIndexOutOfBoundsException,NumberFormatException
Checked Exception
这一类异常,我们必须捕获进行处理
public static void main(String[] args) {
// 编译通过,代码无法通过,属于unchecked Exception
//int i = 1 / 0;
try {
// 编译器检查过,属于Checked Exception
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
常见异常和处理
ArithmeticException:试图除以0
if (b != 0) {
int i = 1 / b;
} else {
System.out.println("不能用0做除数");
}
NullPointerException:当程序访问一个空对象的成员变量或方法,访问一个空数组的成员时发生,怎么处理?
add a = new add();
if(a != null){
a.add2();
}
ClassCastException:类型转化异常
void test(Object obj){
//判断obj是不是Man的实例
if(obj instanceof Man){
Man man = (Man)obj();
}
}
ArrayIndexOutOfBoundsException:访问的元素下标超过数组的长度
NumberFormatException:数字格式异常