java异常处理机制

首先了解什么是异常
java异常指在程序运行时可能出现的一些错误,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。
异常分类:
异常分为两大类,编译期异常和运行期异常。
编译期异常:顾名思义,就是编译时期的异常。我们在调用某个对象的方法时可能会触发的异常,
原因就是该方法也有一个编译期异常,但他并没有去处理该异常,而是将其抛出,由调用者去
处理。例如SimpleDateFormat对象的parse方法。
运行期异常:字面意思,是在程序运行时期出现的异常。
两大异常的特点:
编译期的异常是可知的,显性的,而且是一定要处理的,否则编译时期不能通过。
而运行期异常是未知的。这种异常我们一般不会处理,因为这是程序员写代码时不够严谨从而
触发的异常,这个修改我们进行代码的修正。
RuntimeException类下的子类都是运行期异常。而不是RuntimeException的子类都是编译期异常。
运行期异常Jvm默认的处理方式:jvm默认的处理方式是发现异常,然后往控制台抛出异常,而后
结束程序,不再往下运行。
上面说过,编译期的异常是需要处理的,那么我们该如何进行处理呢?其实java早为我们提供了
方法。异常处理机制try…catch,这是一个针对编译期异常的处理机制,当然,运行期异常也可以
使用;比如除0异常,你知道这句代码运行后会报错,但你就是不想做判断等,也可以用try…catch
进行异常捕获并处理的,具体按需求操作。
那么try…catch怎么使用呢,下图提供格式。
在这里插入图片描述

使用try…catch需要注意两点,第一就是try里面的代码越少越好;二就是catch里面必须要有内容,哪只有一个简单的提示。
使用try…catch处理异常的同时不会影响后面的代码,后面的代码也是可以执行的。下面两张图可得出。
在这里插入图片描述

控制台输出:

在这里插入图片描述

测试得出是不会影响后面的代码。
需要注意的是,一旦try里面出现了问题,就会在这里把问题给抛出去,然后和catch括号的异常类
匹配,一旦匹配,就执行catch里面的处理,然后结束了try,继续执行后面的代码。
下面演示多个异常的处理:
在这里插入图片描述

控制台输出:
在这里插入图片描述

需要注意的一点就是,当try里面有多个异常语句时,最前面的语句先执行,然后把异常对象和catch小括号里面的异常名挨个进行匹配,如果匹配到就进行catch里面的代码,如果没有就抛出异常信息,
程序结束执行。就如下图这般:
在这里插入图片描述

对于使用try,catch捕获多个异常,jdk 7给出了一个简写的处理方案:一个catch捕获多个异常,
| 代表或者的意思,具体看图
在这里插入图片描述

不过该方法有个弊端,就是这个处理方案使得多个异常的处理方式一致,略显单一;而且各个异常
类之间必须是同级关系,父子关系不行。
如何处理未知异常
当我们在使用try…catch,不知道问题语句的具体异常类时,就无法捕获到异常对象,catch就无法
匹配。这是我们可以使用Exception类来接收,Exception是异常父类,可以匹配所有的异常。
在这里插入图片描述

注意:1、能明确异常类的尽量明确,不要用大的来处理(假如除零异常,编译时知道是除零异常就
用除零异常类接收,不要用Exception异常类来接收,资源消耗过大)
2、平级关系的异常谁前谁后都无所谓,但如果出现父子关系的异常类,父异常必须在后

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值