所有异常类的父类,下面分为Error和Exception两个子类
Error表示系统错误或资源耗尽,由Java系统自己使用,应用程序不应抛出和处理
Exception表示应用程序错误,它有很多子类,应用程序也可以通过继承Exception或其子类创建自定义异常
未受检异常:运行时异常RunningTimeException、Error及其子类也是未受检异常
受检异常:Exception的其他子类和Exception自身,
受检异常,java会强制要求程序员进行处理,否则会编译错误,而对于未受检异常则没有这个要求。
一般是继承Exception或者它的某个子类。
四、捕获异常 1、catch捕获1)catch可以有多个,每条对应一种异常类型;
2)找到第一个匹配的catch块,找到后,执行catch块内的代码,不在执行其他catch块,如果没有找到,会继续到上层方法中查找。
finally 内的代码不管有无异常发生,都会执行。
如果异常没有发生,在try内的代码执行结束后执行;
如果发生异常且被catch捕获,在catch内的代码执行结束后执行
如果有异常发生但没有被捕获,在异常被抛给上层之前执行。
如果try或者catch语句内有return语句,则return语句在finally语句执行结束后执行,但finally并不能改变返回值。
public static int test(){
int ret=10;
try{
return ret;
}finally {
ret=2;
}
}
这里函数的返回值为10,而不是2,。执行过程:在执行到try的return语句时,会将返回值ret保存在一个临时变量中,然后执行finally语句,最后再返回那个临时变量,finally中对ret的修改不会被返回。
如果finally中有return语句,try和catch内的return会丢失,实际返回finally中的返回值。finally有return不仅会覆盖try和catch内的返回值,还会掩盖try和catch内的异常,就当异常没有发生一样。
所以应该避免在finally中使用return语句或者抛出异常。
对于文件关闭、资源释放等涉及资源场景,java1.7支持try-with-resources语句,资源的声明和初始化放在try语句内,不用在调用finally,在执行完try语句后,会自动调用资源的close()方法。
对于多个资源,以分号分隔。
try(File file=new File("a.txt")){
//使用资源
}
4、throws
throw用于声明一个方法可能抛出的异常。throws跟在方法的括号后面,可以声明多个异常,以逗号分隔。
对于未受检异常,不要求使用throws进行声明,但对于受检异常,则必须进行声明,换句话说,如果没有声明,则不能抛出。
对于受检异常,不可以抛出而不声明,但可以声明抛出但实际不抛出。主要用于父类方法中声明,父类方法内可能没有抛出,但子类重写方法可能就抛出了,子类不能抛出父类方法中没有声明的受检异常,所以就将所有可能抛出的异常都写在父类上。
一个方法内调用了另一个声明抛出受检异常的方法,则必须处理这个受检异常,可以是catch,也可以继续使用throws.



