Java中异常上抛和异常捕捉的具体使用案例

2022-08-02,,,

异常上抛和异常捕捉的具体使用案例

测试代码:

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

《Java中异常上抛和异常捕捉的具体使用案例.doc》

下载本文的Word格式文档,以方便收藏与打印。