第十六节 java异常

前言

为什么要进行异常处理

现存问题:

    public static void main(String[] args) {
        String str = "hello";
        //str不是数字,会转行出错。
        System.out.println(Integer.parseInt(str));
        int i = 12;
        System.out.println(i);
    }

希望程序出错以后仍然能够继续运行下去。

Java中异常的体系结构

alt

java中与异常处理相关的5个关键字

  • try: try代码块中放可能产生异常的代码
  • catch: catch代码块中放处理异常的代码
  • finally:finally代码块中放一定会被执行的代码
  • throw:throw用在代码中手工抛出异常
  • throws:throws用在方法的声明部分,表示此方法会抛出异常

try和catch

try后面跟一个代码块,将可能产生异常的代码放在这个代码块里
catch处理异常的代码,catch后的小括号中必须定义一个异常类型的引用,用来接收try块抛出的异常对象。Try代码块产生异常时,异常信息被封装到某个类型的异常对象中,对象被传递给catch后面小括号中定义的异常类型的引用。

程序结构

       try {
            //可能产生异常代码
        } catch (Exception e) {
            //对异常处理代码
        }

Try,catch的3种情况:

  • 第1种:try块没有产生异常,try块里的代码执行完毕,不会进catch, 接着执行try,catch后面的其它代码

alt

  • 第2种:try块产生异常,并且产生的异常被正确的捕获到了,直接从产生异常的代码进入catch(产生异常的代码后的其它代码不会执行),catch块里的代码执行完毕后,接着执行try,catch后面的其它代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OimFiX1N-1585660760426)(第2种:try块产生异常,并且产生的异常被正确的捕获到了,直接从产生异常的代码进入catch(产生异常的代码后的其它代码不会执行)],catch块里的代码执行完毕后,接着执行try,catch后面的其它代码)

  • 第3种:try块产生异常,并且产生的异常没有被正确的捕获到了,程序执行直接中断,和没有对异常进行处理是一样的。
    alt

假如try代码块里的代码可能产生多种异常,此时1个try对应多个catch
执行过程:

alt

将产生的异常跟第1个catch里的异常类型进行比较,
假如异常类型匹配,进入这个catch代码块,catch代码块执行完毕,忽略其它的catch块,接下去执行try,catch块后的其它代码
假如不匹配,与下一个catch进行比较,直到找到匹配的,则进入匹配的catch块,catch代码块执行完毕,忽略其它的catch块,假如都不匹配,程序中断,相当于没有对异常进行处理。

注:当要捕获的多个异常存在父子关系的时候,子类在前,父类在后,否则会产生不可达的代码,编译报错;假如不存在父子关系,无所谓先后。

finally

finally代码块
无论前面的try…catch是3种情况下的哪一种,finally里面一定会被执行到。

finally代码块中通常写释放资源的代码

程序结构

try{
	//可能产生异常的代码
}catch(Exception ex){
	//处理异常的代码
}finally{
	//一定会被执行的代码
}

try后面可以只跟catch(可以有多个), 也可以只跟finally(1个),也可以二者都有。

比如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJSoKgHV-1585660760427)(try后面可以只跟catch(可以有多个)], 也可以只跟finally(1个),也可以二者都有)

常见问题1:

alt

常见问题2:

alt

throw和throws

throw: 用在代码中手工抛出异常 。

语法:throw new 异常类();
throws: 用在方法的声明部分,告诉调用者此方法会抛出异常

抛异常的方法:
alt

方法的调用者:
方法的调用者有2个选择:
1.处理异常
2.将异常继续向外抛出,假如已经是main方法,建议不要再向外抛。
alt

自定义异常

继承Exception或者RuntimeExcepion, 实现空参构造和全参构造。

alt

作者简介:一个有故事的程序员,我的微信号qiushuzhao222,欢迎大家找我聊天,记录你我的故事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值