欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

相关标签: Java java