异常

异常时程序运行时出现的问题。(.java转.class)
异常其实是帮助程序员解决问题的一种手段
异常的种类很多,分别代表不同的含义,一旦出现某个异常,此时这个异常的意义时明确的,明确的告诉程序员出现异常的原因。
为什么要引入异常,防御式编程,防御式编程的体现形式
1.LBYL: Look Before You Leap. 在操作之前就做充分的检查.
2.EAFP: It’s Easier to Ask Forgiveness than Permission. “事后获取原谅比事前获取许可更容易”. 也就是 先操作, 遇到问题再处理.


具体设计到几个关键字:
1.try:try语句块中防止可能抛出异常的代码。
2.catch:catch语句块中放置用来处理异常的代码。
3.throw 主动抛出一个异常。
4.throws:某个方法可能会抛出的某些异常
5.finally:一般用于异常处理完毕后的收尾工作。
1.异常
在这里插入图片描述
在这里插入图片描述

出现异常后程序直接终止不再继续执行。
2.代码中使用try处理异常
在这里插入图片描述
在这里插入图片描述
执行代码顺序
1.先执行try的代码,顺序执行。
2.执行try时出现异常就直接执行catch代码。try中剩下的代码就不执行了。
3.当catch执行完毕后会继续执行后续的代码。程序不会异常终止。

try {
            int[] a = null;
            System.out.println(a[0]);
            System.out.println("cccccccccc");
        }catch(NullPointerException e){
            System.out.println("catch");
            e.printStackTrace();//打印出现异常时的调用栈对应信息
        }

在这里插入图片描述
e.printStackTrace() 获取异常
在这里插入图片描述
异常的种类很多,对应的问题原因也不一样,对于异常逻辑的处理也不能一概而论。
在这里插入图片描述
在这里插入图片描述
3.catch中的异常要与抛出的异常类型匹配否则就执行不到catch的语句(使用try,catch时必须明确知道会抛出那些异常)此时的异常是jvm抛出的异常
在这里插入图片描述
4、1个try可匹配多个catch(类似于多分支语句)在这里插入图片描述
5.
记忆使用一个catch语句来捕捉多个异常
假设程序对以上两种异常的处理逻辑是一样的就可以这样做
在这里插入图片描述
使用|就可以把多个异常并列起来,相当于逻辑或抛出若干个异常中的任何一个,都会出发catch
在这里插入图片描述
Exception是一个级别很高的父类,空指针和数组下标越界都是Exception的子类
再进行catch类型匹配的时候不一定要求类型完全一模一样如果抛出的异常时catch的参数异常的之类,也是可以的,这个操作本质上还是一个“向上转型”
Exception e=new NullPointerException();
try catch再使用的时候会设计到代码的跳转
使用finally放到try catch的后边,finally中的逻辑时保证一定会执行到的
这个finally里边一般放一些“首位/善后”的工作
6.finally在这里插入图片描述
这部分代码不管之前出现异常还是不出现异常都会被执行到(例如文件操作,要打开文件,再使用,用完再关闭,文件关闭操作就可以放到finally中);多线程代码中常常设计到 加锁 加锁之后要记得解锁,如果由于抛出异常导致没有执行到解锁操作可能就会出现死锁的问题也就可以把解锁操作放到finally中。

实例7.使用finally回收资源,但是代码写起来会比较麻烦还可以使用java1.7提供的try with resource机制来完成这个操作

在这里插入图片描述
实例8.如果当前方法中额米有合适的catch,一场就会沿着调用线,向上传递
在这里插入图片描述
实例9 如果异常一直往上传,最上边也没有catch,此时此时就回到了实例1相当于没有合适的catch异常,此时异常就会由jvm自己来处理jvm异常的处理就是打印异常调用栈并且程序直接终止。

throw主动抛出异常
被抛出的异常就是一个对象
在这里插入图片描述
通过throw抛出一个异常
在这里插入图片描述
还可以手动输入提示信息
throws 异常说明
标注当前可能抛出的异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值