异常体系【处理方式:声明异常、捕获异常】

1.异常
异常的概述:在java代码或编译或者运行的过程中出现了不能编译或运行结果受影响的情况都属于异常
使用:类对象抛出一个异常类的对象,对象中包含了该异常的产生原因、位置、类型、具体描述、等具体的数据

2.异常的体系
Throwable:解释:是所有的异常的顶层父类,抽取了所有异常的共性的属性和行为
Error:错误:属于异常中的一大分支,指的是程序员不能够进行捕获处理的异常。比如:内存溢出、栈溢出
Exception:异常;属于异常中的另一大分支,指的是我们可以使用代码捕获异常对象。
RuntimeException:运行异常,指的是那些编译没有问题,运行会发生异常的现象比如:空指针异常,除数为0异常。

3.异常的处理
概述:就是我们异常的对象的解决方式
处理方式:手动处理;jvm处理
1.手动处理
概述:需要我们自己对代码进行相关异常的处理方式。
1.声明异常:遇到异常不处理,把异常的类型声明出去,最终由jvm处理。
使用方式:使用关键字throws在方法的声明的后面声明异常的类型。
格式:方法名(参数列表)throws 异常的类型{方法体}
注意:1.声明异常不代表异常对象一定会产生,产生了就进行抛出处理,不产生就不处理,该声明照样声明【声明了有就处理,没有就不处理】
注意2:声明异常没有控制台输出等的效果,只有一个声明异常的效果
注意3:声明异常产生如果抛出去后别人没有处理或者被jvm处理了;下面的代码执行不了,如果别人把异常处理了,如果别人处理了,代码继续执行。
2.捕获异常处理:
1.当方法体中可能出现异常,方法体自己去捕获这个异常对象,并对异常对象内容进行相关处理
格式:
1.try…catch
2.try…catch…finally
3.try…finally
1.try…catch
具体格式:try{可能出现异常的代码段}catch(异常类型 变量名){异常解决的代码段}
try:试试的意思。尝试执行有可能有异常的代码。catch:捕获的意思,如果try中发生异常了,捕获该异常的对象并进行处理():书写catch捕获到的异常对象;{}:书写 处理异常的代码
执行流程:
1.try当中的代码没有发生异常,代码自上而下来执行,执行过程中跳过catch块
2.try当中的代码发生异常;触发catch块到发生异常的地方进行异常对象的捕获,代码执行顺序就会从异常处直接跳转到catch块中执行,完毕继续执行catch块下面的代码
3.catch括号中如果出现异常,可以声明处理也可以捕获异常。
2.多个catch块
具体格式:try{有可能有异常的代码段}catch(异常对象1){解决异常1的方案}(异常对象2){解决异常2的方案}。。。catch(异常对象n){解决异常n的方案}
注意事项:(面试题)
1.多个catch块,执行的时候只会执行其中之一或者一个也不执行
2.多个异常有了同时触发的条件,实际以第一个被触发的异常为准,其他的异常不会被触发,对应执行的是第一个异常的catch块,其他catch块不执行;;;;catch块中不可以写break;但是可以写return 提前【异常处理完】结束方法
3.catch的多个异常对象之间如果有子父类关系,catch异常对象的顺序有要求【自上而下遵循由小到大;子类类型在对象在前,父类类型对象在后】
4.捕获的异常对象处理的时候选择catch块时遵循:
1.优先匹配自己类型的catch块
2.没有自己类型的对象catch块,就近执行最近的父类的对象的catch块
3.自己和父类对象的catch块都没有,那就报错
5.jdk1.7之后,异常捕获时异常类型可以使用|【或】表示【多种不同的异常要想用相同的处理方式的时候可以使用。】
1.多种异常类型对象,可以使用相同的处理方式
2.异常类型是相互独立没有关系的类型【不能继承关系】
格式:catch(异常类型1|异常类型2|异常类型3){}
3.try…catch…finally
具体格式:
try{有可能产生异常代码}catch(异常对象){对异常对象的解决方案}finally{必须执行的代码}
特点
finally里面的代码不管try当中的代码是否会发生异常,它肯定执行
使用场景:try。。catch代码块即将结束前执行
注意事项:
1.中间的catch块可以有多个
2.finally不可以单独使用,必须跟在try代码块后面
4.try…finally
格式:
try{有可能出现异常的代码}finally{肯定执行的代码}
解释:不怎么使用,不可以处理异常,单纯为了finally的使用,异常没有被处理
5.处理异常使用格式注意事项:
1.try代码块可以单独使用【单独使用没有意义】
2.catch块不能单独使用,不能离开try代码块
3.finally不能单独使用,要结合try代码块使用。
3.jvm的异常处理方式
概述:jvm是执行者,调用的main方法;其他方法都需要通过main方法直接或者间接的调用,异常一旦产生,自己又不想解决采用声明的方式来抛出异常,不停的抛来抛去最终抛到jvm,jvm最后一个调用者抛不了必须要自己处理。
jvm的处理方式:
先把程序给停止,然后捕获异常处理【把异常对象中的相关信息进行打印。】
jvm异常的处理和捕获异常处理的区别?
捕获处理异常:
catch块下面的代码可以继续执行出效果【jvm没有停止】
jvm处理异常:
产生异常代码处后面的所有代码都不能够执行了【jvm直接停止】
4.异常分类:
1.编译异常:
概述:在代码编译过程中会对相关代码进行格式和语法的检验,如果不满足就会直接报错显示,不会将错误放到运行去。
编译异常都属于Exception的子类,必须要进行处理才可能继续执行
2.运行异常
概述:在编译的时候不会对代码进行一些相关的检查,只有在运行的时候才会发现有问题的异常。
运行异常都是RuntimeException的子类,可以处理也可以不处理【通过声明的方式交给jvm来处理】
5.异常体系的常用方法:
概述:异常体系的方法全部定义在Throwable类中,其他异常类没有定义任何的方法,都是继承Throwable中的方法。
构造方法:
1.Throwable():创建一个没有任何异常信息的异常对象
2.Throwable(String Message):创建一个只有异常信息描述的对象
3.Throwable(Throw able t):创建一个有异常原因的异常对象。
4.Throwable(String message,Throw able t):创建一个有异常信息和异常原因的异常对象。
普通方法:
1.getCause:获取异常对象的异常原因
2.getMessage:获取异常的提示详细信息[常用]
3.toString:获取异常对象的详细属性信息
4.printStackTrace:打印异常的调用地址信息【常用】
6.异常的关键字
throws关键字:
概述:抛出,抛出的是异常的类型;主要使用在异常处理的声明异常中,主要是在方法的参数列表后面抛出异常的类
throw关键字:
概述:抛出;抛出的是异常的对象。主要使用在方法体中用来产生真正的异常对象,一定是产生了异常对象
7.自定义异常
概述:Java开发中大部分使用的是异常jdk都给大家提前写好了,直接拿来用,但是一些公司开发中jdk提供的异常类不能满足自己的业务需求,就得自己书写一个异常类为自己所用。
分类:
编译异常:
1.创建一个类,类名默认要求以Exception结尾【约定俗称】
2.要这个类继承Exception
3.提供所有的空参构造
运行异常:
1.创建一个类,类名要求以Exception结尾【约定俗称】
2.要这个类继承RuntimeException
3.提供所有的空参构造

发布了29 篇原创文章 · 获赞 9 · 访问量 822

猜你喜欢

转载自blog.csdn.net/qq_41488299/article/details/104784658