异常结构图
异常顶级父类是:Thorwable 它的两个子类是:Error Exception(中文译为异常)
Exception的两个子类为:编译异常和运行异常
编辑异常的核心为:提醒程序员检查本地编译错误
运行异常的核心为:注意由参数错误引起的问题
编辑异常为:处RuntinmeException以及RuntinmeException的子类以外的异常都叫编辑异常
运行异常为:RuntinmeException以及RuntinmeException的子类以内的异常都叫编辑异常(必须有程序员手动处理)
异常的好处:
1.查询bug的相关信息
2.可作为方法的返回值,告诉调用者底层执行的结果
处理异常的方法:
1.JVM处理:就是程序员不处理异常,而且后来接受项目的程序员也不想处理,最后只好JAVA中的JVM进行处理,有一点不好的是如果有异常代码的后面还有代码,那么后面这一部分的代码就不会运行了
2.使用try------cash捕获处理:与第一种相比当成功捕获异常后,异常后面的代码还是会运行,try------cash的底层会在try中创建异常对象拿去与cash中的异常比较,如果一样就捕捉成功。但这种异常的处理又分四种情况:1.如果try中只存在一个异常且被成功捕获,那么try中的代码会完整的运行 2.如果try中有多个异常,那么就有两种解决方案,一种就是一个一个的去捕捉或者一次性捕捉。一个一个的去捕捉需要创建多个cash且要学写对每种异常对应的异常报错的异常名称,try中的代码也会完整的执行;一次性捕捉就只要创建一次cash,cash中写Exception e就行,try中的代码也会完整的执行3.如果try中的异常没有被捕获,那么代码就会停止运行4.如果try中异常没有捕捉成功且异常代码的下面还有代码,那么异常代码下面的代码就不会运行。
3.异常抛出:需要用的两个关键字throw和throws,前者是会返回一个异常对象告诉调用者方法运行失败的原因,后者是告诉调用者调用方法运行可能失败的原因(在运行异常中不用写出),这种方式经常会和自定义异常一起使用。
自定义异常:是指的是不符合业务需求代码。就比如说一个业务规定人的名字不能超过2个字符,那么你在调用者输入自己名字字符的时候就会加入一个if判断,但是这种判断的结果时返回在控制台,而调用者并不知道自己的名字为什么录入不进去,这是你就需要用到抛出异常,将原因返回给调用者,但这种字符长度的错误并不是Java的编辑异常和自带的运行异常,而是业务的要求导致,而Java中的异常又无法表示你这种异常,所以你要增加一个能够表示这种情况的异常,创建一个新的异常名字要见名知意,要有空参构造和有参构造,因为符合运行异常的核心所以要继承Exception
场景使用:
在平时的业务之中一般就是try------cash加异常抛出加自定义异常