黑马程序员——异常
异常:
异常就是对问题的描述,然后将问题进行对象的封装。
异常体系:
Throwable
|__Error
|
|__Exception
|
|___RuntimeException
异常体系的特点:
异常体系中所有的类以及建立的子类对象都具备可抛性,也就是可以被throw和throws关键词所操作
throw和throws的区别:
throw抛出的是异常对象,后面只能跟一个异常对象,定义在函数内;而throws抛出的是异常类,后面可跟多个异 常类名,定义在方法上。
异常分类:
编译时异常和运行时异常
编译异常:
如果你在方法中抛出了编译时异常,那么你必须对其进行处理,要么在函数上声明该异常,要么抛要么捕捉,但我觉得如果你在方法中抛出该异常然后在捕捉try没什么意义,你抛出编译时异常不就是为了让调用你方法的知道会有那么一个异常吗?,而你捕捉之后,调用你方法的人是不知道会有这样一个异常的。当你掉用了抛出编译时异常的方法时,也有两中处理方式要么抛,要么try.,否则编译失败。
运行时异常:
RuntimExecption可以说是所有运行时异常的一个父类,在方法中抛出该异常 的,只有当程序运行时真抛出了这样一个问题你才知道会有这样一个异常,所以当你调用抛出运行时异常的方法时,你可以try,也可以不做处理 ;并且当你调用抛出运行时异常的方法时,你是不知道会有这样一个异常可以不做任何处理。抛出运行时异常目的就是想让调用此方法的人当出现该异常时,把程序停掉,不要在向下执行了,比如,当你链接数据库时,你连都没上,还要把程序继续往下执行,那莫下面所在的操作的都是没有什莫意义的。异常处理语句:
try{
要被检测的代码
}catch(Exception e)
{
异常处理代码
}finally
{
一定会被执行的代码
}
注意:1.finally中定义的通常是关闭资源的代码。因为资源必须被释放
2. finally有一种不会被执行,就是当执行到System.exit(0)时,finally代码块不会被执行
异常的好处:
1.将问题进行封装。
2.将正常流程代码和异常处理代码相分离,方便阅读
异常的主要事项:
在子父类覆盖时:
1子类抛出的异常必须是父类的异常的子类或子集
2如果父类或者接口中没有异常的抛出,那么子类覆盖出现异常,只能try,不能抛。