1、类的子类
ThrowTabel类的子类:
Error:一般在数据库崩溃或者系统崩溃的时候出现的
Exception:一般在程序出错的时候出现的
2、Exception的特殊子类
Exception的子类:RuntimeException运行时异常
3、RuntimeException中包括哪些常见的异常?
- 算术异常:ArithmeticException
- 角标越界异常:IndexOutOfBoundsException
- 空指针异常:NullPointerException
- 类型转换异常:ClassCastException
- 并发编程异常:CocurrentModifyException
4、一般来说处理异常有哪两种方式?
1、使用 try...catch...finally语句
2、使用 throw语句抛出异常给JVM,然后JVM打印异常信息
5、如何使用 try...catch...finally语句?
try:用于测试异常
catch: 用于捕获异常
finally:用于在语句最后执行,不管测试异常中语句是否正常,不管测试语句中语句是否匹配到,最后都会执行
代码示例:
public class Demo04finally的特点 {
public static void main(String[] args) {
try {
System.out.println(10/0);
return;
} catch ( IndexOutOfBoundsException e) {
System.out.println("异常:除以0了");
} finally {
System.out.println("异常结束前的操作");
}
System.out.println("正常语句");
}
}
在测试异常语句中出现多个异常的情况:
public static void main(String[] args) {
int [] array = {1,2,3,4};
try {
//这里产生异常对象之后就去匹配(执行一次后就匹配),匹配上了就执行catch中的语句,匹配成功后程序继续向下执行,
System.out.println(10/0);
System.out.println(array[10]);
}catch (ArithmeticException e) {
/*
* 注意:如果使用Exception e 直接匹配异常,多个catch同时捕获的时候,需要写在最后,Exception写在前面的话,所有的异常都是他的子类,那么后面的catch相当于是摆设
*/
System.out.println("异常:除数为0");
}catch (IndexOutOfBoundsException e) {
//如果发生多个异常需要匹配多个catch
System.out.println("异常:角标越界");
}
catch (Exception e) {
System.out.println("你出错了");
}
System.out.println("我执行没");
}
分析:
1、在这里catch条件中 Exception e,他是这里异常的父类,需要放在最后面,如果将Exception放在前面,后面的异常将不会执行
2、在这里如果测试异常中的第一个语句没有catch到,就会结束try catch 执行后面的语句
6、运行时异常和编译异常和编写异常的区别
运行时异常:就是代码的问题,比如空指针,角标越界之类的
编译异常:是问题的提前预警,需要去处理,否则编译不通过
编写异常:是编写语法的错误
7、final、finally、finalize的区别?
final:修饰类不可被继承,修饰方法不可被重写,修饰变量变为常量
finally:在try...catch...finally语句中,用于在最后执行
finalize:在Object基类中,所有的对象共有的方法,在垃圾回收的时候被系统调用(内存空间满了)