Java中异常上抛和异常捕捉的具体使用案例
程序员文章站
2022-05-14 20:49:10
异常上抛和异常捕捉的具体使用案例:测试代码:import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class Test06 { public static void main(String[] args) { // m1()抛出了Exception异常,这里只能抛出同类型异常Exception或者Exception的父类型Throwabl...
异常上抛和异常捕捉的具体使用案例:
测试代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Test06 {
public static void main(String[] args) { // m1()抛出了Exception异常,这里只能抛出同类型异常Exception或者Exception的父类型Throwable
/*
* 一般不建议在main()方法上使用throws,因为这个异常如果发生了,main()再不解决,直接给JVM,将终止程序执行
* 而异常处理机制的作用就是不让程序异常停止,从而增强程序的健壮性
* 所以main()方法中的异常建议使用try..catch进行捕捉,不要再上抛了。
* */
System.out.println("main() start!");
//m1(); // main()中异常应该不再上抛,上抛JVM一定会终止程序,使用try..catch捕捉处理
try {
m1();
// 如果m1()方法出现异常,这里的代码不再执行,进入catch语句
System.out.println("hello world!");
} catch (Exception e) { // 这里的e对象保存了FileInputStream中构造方法内new的一个对象:throw new FileNotFoundException("Invalid file path")这个对象的内存地址
System.out.println("文件不存在,可能路径写错了!");
System.out.println(e); //java.io.FileNotFoundException: H:\test061.txt (系统找不到指定的文件。)
e.printStackTrace(); // 输出异常具体信息
}
System.out.println("main() over!"); // 异常捕捉后,程序不会停止,这句代码会继续执行
}
private static void m1() throws Exception { // m2()抛出了IOException异常,这里只能抛出同类型异常IOException或者IOException的父类型异常Exception
System.out.println("m1() start!");
m2();
System.out.println("m1() over!"); // 如果上面出现异常,这句代码不会执行
}
private static void m2() throws IOException { // 这里可以抛FileNotFoundException异常,也可以抛IOException异常
/*
* 因为FileNotFoundException继承IOException,属于IOException
* 调用者可以抛出异常类型的异常,也可以抛出异常类型的父类型异常
* 我们都知道,Exception是所有异常的父类,故所有异常选择上抛时,方法声明处都可使用throws Exception进行上抛
* */
System.out.println("m2() start!");
m3();
System.out.println("m2() over!"); // 如果上面出现异常,这句代码不会执行
}
private static void m3() throws FileNotFoundException {
/* 这里调用一个IO输入流类的构造方法,这里只是借用这个类来学习异常机制,并不讨论这个类的作用
* 我们发现FileInputStream(String s)构造方法throws FileNotFoundException异常
* 而FileNotFoundException extends IOException
* 继而发现IOException extends Exception
* 我们发现没有经过RuntimeException,而是直接到了Exception这个父类
* 说明FileNotFoundException这个异常属于编译时异常,编译时异常必须预先处理
* 异常处理有2种方式:继续上抛给调用者 或者 自己使用try..catch进行捕捉。
* 如果选择继续上抛给调用者,调用者又有2种处理方式
* 如果选择使用try..catch进行捕捉,异常问题就得到解决,调用者不必处理
* */
System.out.println("m3() start!");
// 我们在H盘下新建一个叫“test06”的txt文本文件,文件地址传入构造方法进行测试异常,然后修改传入的参数内容再测试
new FileInputStream("H:\\test061.txt"); // 可以选择上抛,或者自己try..catch捕捉处理
System.out.println("m3() over!"); // 如果上面出现异常,这句代码不会执行
}
}
本文地址:https://blog.csdn.net/pipizhen_/article/details/107387811
下一篇: angularJS深拷贝详解