一、异常的概述
1、异常:程序出现了不正常的情况
2、异常分为哪两种情况
编译时期异常:代码本身没有语法错误,但是会出现报错的情况
运行时期异常:代码在编译期间是看不出来问题的,但是程序一
运行就会出现错误
二、异常的体系结构Throwable
1、异常体系之Error描述(严重问题)
同常代码出现重大问题,比如内存溢出,运行的类不存在,这些异常不需要处理,需要修改代码。
2、异常体系之Exception(不严重)
编译期间异常:需要进行处理(二种方式:捕获异常和抛异常)
运行期间异常:这个不需要处理,需要修改代码。
三、jvm的默认处理和自己处理异常
1、自行处理异常基本格式
叫做捕获异常
基本格式:try{可能发生问题的代码}
catch(异常的类名 变量名){
异常处理的代码
}
四、代码中出现了多个异常怎么处理
注意:在异常处理中,假如try里面有多个可能出现问题的代码,如果try里面第一个有问题的代码
出现问题了,这个时候代码直接走到catch中,try第一个异常之后的代码就不会执行了。
技巧:如果异常报了多个错误的行号的话,要找第一个
五、多个catch的顺序问题
针对多个异常,写一个try的代码,catch里异常类名会不会有顺序问题?
异常是平级关系的话,catch无顺序
异常是具有子父类关系的时候,父类一定要放在最后。
注意:异常或者错误,都是以他们所在体系的父类作为后缀。
XxxException
XxxError
六、异常处理中JDK7的新特性
理解异常在JDK1.7之后的新特性
格式 :
catch (异常1 | 异常2|异常3...变量名)
一个catch中可以用或链接多个异常类。
七、Throwable的几个方法和标准catch代码
public void printStackTrace();
把错误信息显示在控制台
try{可能发生问题的代码}
catch(异常的类名 变量名){
变量名.printStackTrace
}
八、finally概述和简单使用
finally {} 大括号里一般写的是释放资源的代码
注意:finally里边的代码一定会执行
final,finally,finalize的区别。
final 是一个关键字
它修饰的类不能被继承
它修饰的方法不能被重写
它修饰的变量,就具备了常量的特性。
finally
它是异常处理的一部分,finally里面的代码永远被执行
但是有一个特殊情况,在finally执行之前就退出了虚拟机
finalize
它是Object类中垃圾回收器的方法
2:finally里面的代码 会永远执行。但是有一个特殊情况:在代码执行到finally之前,jvm就退出了。
九、把异常抛出处理
异常的处理方式二种:一种捕获异常,另一种就是抛出throw 和throws
throw 和throws的区别
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}
public void doA(int a) throws Exception1,Exception3{......}
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。
throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。
throws出现在方法函数头;而throw出现在函数体。
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定
抛出了某种异常。
十、自定义异常:
就是定义一个类去继承Exception或RuntimeExcepton.
开发中一般继承RuntimeExcepton.
自定义的类继承了Exception ,一旦方法内部抛异常了,方法必须throws,而且在main方法中调用方式时是必须需要处理的。
自定义的类继承了RunntimeException,及时方法内部抛异常了,方法也不需要抛异常,并且main方法中调用方法也不需要处理。