throws+异常类型方式处理异常:
throws+异常类型写在方法的声明处,指明此方法执行时,可能会抛出的异常类型
一旦方法体执行时出现异常,仍然会在异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时就会被抛出。方法体中出现异常的代码后面的代码不会被执行。
注意:运行时异常(RuntimeException)可以不用try-catch处理,也可以不用throws处理
对比:
throws本质上并没有把异常解决掉,而是抛给了方法的调用者,只是对当前方法来说异常处理结束。
try-catch-finally的方式才是真正把异常解决掉了
package test02;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionTest {
public static void method1() throws FileNotFoundException,IOException{
File file=new File("hello.txt");//写成throws IOException也行,因为IOException是FileNotFoundException的父类
//注意如果 FileNotFoundException和IOException的处理方式不一样,一定要分开写
FileInputStream fis=new FileInputStream(file);
int data=fis.read();
while(data!=-1) {
System.out.print((char)data);
data=fis.read();
}
fis.close();
}
//如果FileNotFoundException和IOException的处理方式一样,直接throws IOException即可
public static void method2() throws FileNotFoundException,IOException{
method1();
}
//main方法也可以继续throws,抛给虚拟机,但尽量在main就把异常全部干掉,不要throws,用try-catch,处理掉了就不会有问题了
public static void main(String[] args) {
try {
method2();//如果method2只throws了IOException,只用一个catch(IOException e)即可
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
//假设有一个方法为method3,在方法体中调用method2,用try-catch处理,在main中调用method3,就不用处理异常了
}