1.异常的概念:
异常是指阻止当前方法或作用域继续执行的问题,发生错误,正常执行被中断
例如:正常行车过程应该是车出发前检查-------行车-----到达目的地,但是中途有可能出现堵车、撞车等不在计划之内的情况,而出现这种情况之后我们需要等待交警、保险公司、修车等一系列事情的完成后才能继续开车上路,即:
代码编译---------程序运行---程序执行成功
出错
---错误信息交给一个合适的接收者,知道如何处理----异常处理
出现异常后,如果该异常是Java已经定义好的异常类型,Jvm就会在堆上new一个新的异常对象然后将异常交给异常处理机制程序终止,程序的执行权到达异常处理机制,异常处理分为直接处理异常(try{ 异常代码 }catch(exception e){ 异常处理 })和抛出异常(交给调用者处理、最上层是jvm)
出现异常后,jvm中会产生:
- 在堆上new出异常对象
- 终止当前执行,弹出当前异常对象的引用
- 异常处理机制接管程序的执行权
- 异常可以看成是一种内建的恢复系统,在程序中拥有恢复点
2.异常的分类
Throwable是所有异常类的超类
Error : 跟jvm相关的问题,环境问题
Exception :程序错误
运行时异常:只有程序运行时才能看出
空指针NullPointerException,数学异常ArithmeticException,数组下标越界ArrayIndexOutOfBoundsException
检查时异常:代码调用,被调用方申明风险
//数学异常
int i = 5/0;
//空指针异常
String str = null;
System.out.println(str.equals("abc"));
//数组下标越界异常
int[] j = {1,2,3};
System.out.println(j[3]);
3.异常的捕获
异常处理5个关键字
try 、catch 、finally、throw、throws
最大捕获catch(exception e) 异常具体化
顺序执行 如果最大捕获在前 其他catch则不再作用
finally最后必定会执行,哪怕在finall之前有return
return代表代码块的最后一句
如果system.exit(0)在finally之前则finally不再执行
finally中发生异常的话 程序会被中断并打印异常堆栈
4.异常抛出
当前位置不能处理则抛出给上级
异常堆栈,异常轨迹
thow:手动抛出 thows:声明该方法会抛出异常
抛出运行时异常:调用方不用做处理
抛出检查时异常:调用者一定要做处理
方法后可声明抛出多个异常
- 异常抛出案例
6.异常小结
常用两个异常构造方法:无参构造方法,有参构造方法(参数为指定异常信息)
getMassage方法获取异常信息 printStackTrace打印异常堆栈
方法重写 1.父类没有异常,那子类也应该没有异常的抛出
父类有异常,那子类可以没有异常的抛出
2.子类可以抛出父类异常的子集,不能抛出比父类异常大的异常类
7.自定义异常
一:创建一个类继承exception或其子类
二:添加构造方法
三:在一个方法中使用throw抛出异常 方法后throws向调用方抛
四:在另一个方法中捕获并处理异常