异常的继承体系
异常举例
// 除数为0
int i = 10;
// i = i / 0;
// ArithmeticException :运行时异常
// 默认情况下,程序一旦发生异常,只用告诉jvm,发生异常了,然后将异常信息,打印到控制台
// 然后结束程序的执行
int[] array1 = { 1, 2, 3 };
array1[3] = 10;
// ArrayIndexOutOfBoundsException
// 空指针异常
Student stu = null;// 定义一个变量
// 无论 是基本数据类型还是引用数据类型,作为局部变量,
// 必须要初始化后才能使用
stu.i = 10;
// stu.eat();
// NullPointerException
// 为什么会发生NullPointerException异常,
// 因为在null值的引用上面调用了成员变量或者成员方法
方法重写时,也会抛出相同类型的异常(为默认行为),也可以抛出该异常的子类异常
父类方法没有抛出异常,子类不能抛出异常,只能try...catch 处理
java的异常处理方案:
A.jvm的默认异常处理方法
A1.打印异常类型,异常错误信息,具体的文件名,以及错误类型
A2.结束程序的执行
B.自定义的异常处理方案:
B1.throws
B2.try... catch... finally
try... catch... finally 注意事项:
1:finally 可以不写
2:catch 可以不写吗,可以,但是必须try... finally成对出现
3:catch 是否可以有多个?可以
如何处理编译时异常
1:throws 继续往外抛
2:try... catch... finally 主动处理
3:将编译时候的异常转变为运行时异常
关键字 throws
throws 一个运行时异常的时候,方法后面不用throws
throws 一个编译时异常的时候,方法后面必须显示 使用throws 抛出异常类型,告知调用者
finally语句块
finally语句块 一定会执行