JAVA中的异常机制的处理办法(throws上抛 和 try…catch捕捉)
-
第一种处理方法:
在方法声明位置上继续使用throws,来完成异常的上抛,抛给调用者,
上抛类似于推卸责任。(继续把异常抛给调用者) -
第二种处理方法:
使用try…catch捕捉,捕捉等于把异常拦下了,异常真正解决了(调用者不会收到异常信息) -
到main方法时不建议继续上抛了,如果该异常真的发生,就会上抛给JVM,那么程序只能终止了。
异常处理机制是为了增强程序的健壮性,应该是如何做才能发生了异常也不影响程序的执行
即一般建议在main方法处对异常进行捕捉 -
try…catch捕捉异常后,后续语句会照常进行
-
注意:只要异常没有捕捉,采用上抛的方式,此方法的后续代码不会执行
另外,try语句中某一行出现异常,try块中后续代码不会执行,但try…catch块的后续语句仍会执行 -
catch语句中可以同时写多条同级异常信息,中间使用一条 | 隔开,这是java8的新特性
例如:catch(FileNotFoundException | ArrayIndexOutOfBoundsException e)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//注意:只要异常没有捕捉,采用上抛的方式,此方法的后续代码不会执行
//另外,try语句中某一行出现异常,try块中后续代码不会执行,但try..catch块的后续语句仍会执行
public class ExceptionTest04 {
public static void main(String[] args) {
//到main方法时不建议继续上抛了,如果该异常真的发生了,就会上抛给JVM,那么程序只能终止了
//异常处理机制是为了增强程序的健壮性,应该是如何做才能发生了异常也不影响程序的执行
//即一般建议在main方法处对异常进行捕捉
System.out.println("main begin");
//这里选择捕捉异常,即使用try..catch
try {
m1();
//捕捉到异常后直接进入catch分支,此处的hello world就不执行了
System.out.println("hello world");
//多态:IOException e = new FileNotFoundException();
}catch (FileNotFoundException e){ //这里的IOException是引用数据类型,e为引用
//catch(FileNotFoundException | ArrayIndexOutOfBoundsException e) java8新特性
//捕捉到异常之后的分支
System.out.println("发生异常,文件路径错误或文件不存在");
System.out.println(e);
//可以输出e,结果为java.io.FileNotFoundException: C:\Gam\123.txt (系统找不到指定的路径。)
}catch (IOException e){
//catch可以写多个,但 从上到下 应该遵循 从小到大(异常的继承关系) 的原则
System.out.println("IO异常");
}
//try..catch捕捉异常后,后续语句会会照常进行
System.out.println("main over");
}
private static void m1() throws IOException { //上抛时可以选择上抛异常的父类
System.out.println("m1 begin");
//因为前一级使用了throws,所以异常上抛到了它的调用者
//继续上抛
m2();
//因为调用m2时发生异常,而m2中选择了上抛,所以m2 over不执行
// m1中也选择了上抛,所以m1 over不执行
System.out.println("m1 over");
}
private static void m2() throws FileNotFoundException {
System.out.println("m2 begin");
/*
这里调用了一个构造方法,FileInputStream(String name),创建输入流对象
这个构造方法的声明位置上有throws FileNotFoundException,
由其源码可知是一个编码时异常
不对这个异常进行处理,代码就会报错
*/
//同样的,有两种处理方法,throws或者try..catch
//这里选择throws
new FileInputStream("C:\\Gam\\123.txt");//用于读取文件的构造方法
System.out.println("m2 over");
}
}
//运行结果:
main begin
m1 begin
m2 begin
发生异常,文件路径错误或文件不存在
java.io.FileNotFoundException: C:\Gam\123.txt (系统找不到指定的路径。)
main over