1、声明
(1)定义一个类的方法的时候,可以指定这个方法可能抛出什么异常
(2)例如FileInputStream是通过流来读取一个文件,读文件的话,name这会传一个文件路径过来,但是这个路径下面的文件可能不存在,因此这个构造方法可能会错,因此通过FileNoFoundException告诉编译器可能会有什么错误。
2、什么时候需要使用throws呢?
(1)在FileInputStream类中,有很多重载的构造函数,在这些重载的构造函数中,有throws声明,throws FileNotFoundException, FileNotFoundException是Exception的子类,不是RuntimeException的子类,是一个需要checked的异常
(2)在new的时候,就会调用其构造方法了,这个构造方法会可能抛出一个checked异常,在main方法中,调用了FileInputStream的构造方法,而这个构造方法又可能抛一个checked异常。
(3)保存之后,会报错,改法1
- 添加了上面的话之后,代表main中也可能会抛出异常
- 因为main中调用了FileInputStream构造方法,这个构造方法会调用一个FileNotFoundException这样一个checked异常,但是这个代码里面没有进行try、catch处理,调用的方法里面又可能会出现异常,说明main方法中也可能出现FileNotFoundException异常,因此main中也要throw。
- 调用一个已抛出异常的方法,但是没有try、catch,也就是没有进行相应的处理,这个时候,这个方法所在的方法也需要抛出异常
(4)保存之后,会报错,改法2
可能出现异常,那么我们就进行相应的处理。
(3)和(4)的改法都是针对已检查异常来说的,对于未检查异常则不需要做相应的改动。
(5)抛出多个异常的话,用“,”分隔开
(6)对于unchecked异常
按理说,既然已经声明了这么一个异常,那么divide中就应该抛出异常。
但是这样也对,因为ArithmeticExteption是uncheckedException,所以不需要main抛出异常。
3、RuntimeException
可以进行try、catch处理,同时也可以在divide方法中抛出异常,同样这些都不做也正确
4、非RuntimeException
5、总结