JAVA中的异常机制的处理办法(throws上抛 和 try..catch捕捉)

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值