finally语句:
1:finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理。
2:无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
3:通常在finally语句中可以进行资源的清除工作,如:
关闭打开的文件,删除临时文件……
几点注意:
1:与 try-catch语句的区别:finally段的代码无论是否发生异常都有执行。
2:finally语句所做的工作类似是收尾工作,即给出异常发生后的一个处理办法。
标观察下边代码的结构(内容不重要)
FileInputStream in = null;
try{
in = new FIleInputStream ("myfile.txt"); //可能抛出FIleInputStream。
int b;
b = in.read(); //可能抛出IOException
while (b!=-1) {
System.out.print((char) b);
b = in.read;
}
}catch(FileNotFoundException e) { //处理FIleInputStream
e.printStackTrace();
}catch(IOException e) { //处理IOException
System.out.println(e.getMessage());
}finally{
try{ 还可能出错,再加一个try。
in.close(); //处理,关闭in。
}catch (IOException e) {
e.printStackTrace();
}
}
异常的抛出:
java的例外处理机制使得例外事件,沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。(即:不断向前寻找,知道可以抛出,最高抛出给运行时系统)。
throw和throws
1:throws:通常被应用于在声明方法时,用来指定方法可能抛出的异常,多个异常可以使用逗号隔开。
2:throw(声明方法抛出的异常):throw通常用于方法体当中,并且会抛出一个异常对象,程序执行到throw语句时立刻终止。
public class Captor {
static int quotient(int x,int y) throws MyException{
if( y<0){
throw new MyException("除数不能是负数");
}
return x/y;
}
public static void main(String args[]){
try {
int result = quotient (3 , -1);
}catch(MyException e){
System.out.println(e.getMessage());
}catch(ArithmeticException e){
System.out.println("除数不能为零");
}catch(Exception e){
System.out.println("程序发生了其他异常");
}
}
}
输出结果:除数不能是负数。
关于使用自定义的异常:
1:通过继承java.lang.Exception类声明自己的异常类。
2:在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3:在方法的声明部分用throws语句声明该方法可能抛出的异常。
异常与继承之间的关系:
重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。(即重写方法,只能是不抛异常或抛出同类型的异常)
总结:
1:一个图:异常与错误的分类
2:五个关键字:try,catch,finally,throw,throws。
3:先抓小异常,再抓大异常。
4:异常与重写之间的关系。