异常的分类:(Error和Exception)
Java中异常都来自于Throwable类的子类,主要有两个级别,一个是Error级别,另一个是Exception级别。
Error的特点
:
1)Error是不可被控制的(unchecked);
2)Error用于表示系统级别的错误或者底层资源的错误;
3)如果要想处理Error,应该在
系统的层面
进行捕捉。
Exception的特点
:
1)可被控制(checked) 或不可控制的(unchecked);
2)由程序员导致的错误;
3)异常都可以在
应用程序层面
进行处理。
家族图谱如下图
Exception的分类:(必须检查(Checked exception)和不必须检查(Unchecked exception))
异常Exception是可以在应用层面进行捕获或者抛出的。异常也根据检查的的强弱可以分为
必须检查
(Checked exception)和
不必须检查
(Unchecked exception)两种;根据JVM对异常检查的阶段也分别称为编译时检查异常,运行时检查异常。
编译时检查异常
:是Exception的子类,这种异常必须要求在编译的时候进行检查处理否则无法编译。
运行时异常
:是RuntimeException的子类,这种异常无需在编译阶段检查,在程序运行的过程中再进行检查的。(例如:
数组下标越界,空指针异常,变量类型进行转换时,类型不符等
)
例如:
int
num=Integer.parseInt("abc");
|
在编译的时候是能够编译通过,而在运行的时候会给出报错信息,这种异常称为运行时检查异常
throw 和throws的区别:
声明方法需要检查
使用
throws------------即:在方法名后面声明
用在方法体内部
的使用
throw
注意:
finally 经常用于一些清理的工作,因为它是一定会被执行的,在return 的前一步执行,不管是否已经return 都会被执行。
使用异常处理机制的建议:
1.要避免使用异常处理答题错误处理,这样会降低程序的清晰性,并且效率低下。
2.处理异常不可代替简单测试----只在异常情况下使用异常机制。
3.不要小颗粒度的异常处理---应该将整个任务包装在一个Try语句中
4.异常往往在高层(调用者)处理。
总结:
------->1.一个图(上图有)
------->2.五个关键字(try catch finally,throws,throw)
------->3.先逮小的,再逮大的(即:若存在继承关系,先catch 子类)
------->4.异常和重写的关系(子类重写父类时,声明的范围不能超过父类)
-------->5.自定义异常