(一)异常:有异于常态,和正常情况不一样,有错误出现。阻止当前方法或作用域。
throwable:
1、error:(1)虚拟机错误(VirtualMachineError)
(2)线程死锁(ThreadDeath)
2、exception:(1)非检查异常:1)空指针异常(NullPointerException)
2)数组下标越界异常(ArrayIndexOutOfBoundsException)
3)类型转换异常(ClassCastException)
4)算术异常(ArithmeticException)
(2)检查异常:文件异常(IOException)、SQL异常(SQLException)
(二)try…catch...finally实现异常处理
try:抛出异常,抛出异常的方法会终止执行,程序的控制权将被移交给catch块中的异常处理程序。
try{
//一些会抛出异常的方法
}catch(Exception e){
//处理该异常的代码块
}
try:会抛出很多类型的异常
try{
……
}catch(Exception e){
……
}catch(Exception2 e){
……
}…(n个catch块)…{
}
catch语句的循序:先小后大(先子类后父类)
try{
……
}catch(Exception e){
……
}catch(Exception2 e){
……
}…(n个catch块)…{
……
}finally{
//最终将要执行的一些代码
}
(三)异常抛出以及自定义异常
throw:将产生的异常抛出(动作),写在方法体里面,表明抛出的具体异常这个动作
throws:声明将要抛出何种类型的异常(声明)
public void 方法名 (参数列表)throws 异常列表{
//调用会抛出异常的方法或者:
throw new Exception();
}
自定义异常:class 自定义异常类 extends 异常类型{
}
(四)小结一下下~~
1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理;
2、在多重catch块后面,可以加上一个catch(Exception)来处理可能会被遗漏的异常;
3、对于不确定的代码,也可以加上try-catch,处理潜在的异常;
4、尽量去处理异常,切记只是简单的调用printStackTrace()去打印输出;
5、具体如何处理异常,要根据不同的业务需求和异常类型去决定;
6、尽量添加finally语句块去释放占用的资源。