声明检查类型异常 throws
概述:如果一个方法可能会出现异常,但我们不想使用try..catch 精准捕捉处理异常,只想模糊处理,可以在方法声明处用throws子句来声明抛出异常。其实程序默认的报错方式就是抛出。
例如:如果我们需要读取一份文件,但是有可能读取的文件不存在,或者内容为空,所以我们需要告诉编译器可能会出现FileNotFoundException类异常
public FileInputSteam(String name) throws FileNotFoundException,ArrayIndexOutOfBoundsException // 可以抛出多个异常
注意:子类抛出的异常必须与父类一致,或者是父类异常的子类。
-
注意:throws 会将异常抛给调用的语句块。比如 f1( )方法里面抛出了FileNotFoundException异常,若 f2( )方法调用 f1( )方法,f2( )方法就得处理f1( )方法里面抛出的FileNotFoundException异常。前提是这个异常是 检查型/运行时异常,非检查型异常不报错,因为非检查型异常本身就默认有检查方式抛出。
- 处理方式
- f2( )方法也抛出FileNotFoundException异常
- f2( )方法使用try..catch捕捉异常
- 处理方式
抛出异常 throw
抛出异常很简单,抛出后就不用管了
- throw 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。注意与 throws 的区别
- 首先要决定抛出什么异常,比如 throw new IOException
- 也可以是 var e = new IOException( ) ; throw e ;
创建自定义异常类
- 概述:如果遇到现有任何标准异常类都无法描述清楚的问题,这种情况下就需要创建一个属于自己的异常类了。
- 如何:我们要做的就是定义一个派生于Exception 的类,或者子类,比如IOException。
- 超类Throwable 的 toString 会返回字符串,很好用
- 创建异常类应该包含两个构造器,一个是默认的构造器,一个是包含详细描述信息的构造器。
//创建自定义异常类
class FileFormatException extend IOException{
public FileFormatException(){} // 默认的构造器
public FileFormatException(String gripe){ // 详细描述信息的构造器
super(gripe);
}
}
// 抛出自定义异常类
String readData(Buffered in) throws FileFormatException{
......
while(...){
if (. . .){
throw new FileFormatException();
}
......
}
return ...;
}