Java的throws异常处理
基本介绍:
1)如果一个方法(中的执行语句)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
2)在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
package com.exception_;import java.io.FileInputStream;
import java.io.FileNotFoundException;public class Throws01 {public static void main(String[] args) {}public void f1() throws FileNotFoundException,NullPointerException,ArithmeticException{ //也可以写throws Exception//创建了一个文件流对象//解读://这里的异常是一个FileNotFoundException 编译异常,必须对其处理//使用try-catch-finally处理//或使用throws抛出异常,让调用f1()的调用者来处理//throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类(如Exception,Error(基类)和它的父类)//throws 关键字后也可以是 异常列表,即可以抛出多个异常FileInputStream fis = new FileInputStream("d://aa.txt");}
}
注意事项和使用细节:
1)对于编译异常,程序中必须处理,比如try-catch或throws
2)对于运行时异常,程序中如果没有处理,默认就是throws的方式
3)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
4)在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws
package com.exception_;import java.io.FileInputStream;
import java.io.FileNotFoundException;public class ThrowsDetails {public static void main(String[] args) {}public void f2() /*throws ArithmeticException 把异常抛给调用者,默认不写也有*/{int n1 = 10;int n2 = 0;double res = n1/n2;}public void f1() throws FileNotFoundException{f3();//当f1()不去throws时,这个语句会报错//解读://1.因为f3() 方法抛出的是一个编译异常//2.即这时,就要求f1() 必须处理这个异常(try-catch或继续throws)}public void f3() throws FileNotFoundException {FileInputStream fis = new FileInputStream("d://aa.txt");}public static void f4(){f5();//这里直接调用f5不会报错//解读://f5抛出的是一个运行异常//java中并不要求程序员显示处理,因为有默认处理机制}public static void f5() throws ArithmeticException{}}
class Father{//父类public void method() throws RuntimeException{}
}
class Son extends Father{//子类
//子类重写父类的方法时,对抛出异常的规定:
//子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型@Overridepublic void method() throws NullPointerException{//子类抛出的类型必须是它父类抛出类型的子类super.method();}
}