异常结构
java.lang.Throwable |----java.lang.Error:Java虚拟机无法解决的严重问题,一般不编写针对性 的代码进行处理。 |---java.lang.Exception:可以进行异常处理 |----编译时异常 |---IOException |---FileNotFoundException |---ClassNotFoundException |----运行时异常 |---ArithmeticException 算术异常 |---NumberFormatException 类型转换异常 |---ArrayIndexOutOfBoundsException 数组下标越界异常 |---NullPointerException 空指针异常
异常处理机制---抓抛模型
过程一:抛:程序正常执行,一旦出现异常,会在异常代码出生成对应的异常类的对象并抛出,其后面的代码不在执行。 (jvm自己处理,并没有真正的解决异常)
throw new 异常对象形式
过程二
抓:可以理解为对异常的处理1. try--catch--finally 2. throws
二. 异常处理方式一
try---catch--finally 的使用
try{ //可能出现的代码 }catch(异常的类型1 变量名1){ //处理的异常方式1 }catch(异常的类型2 变量名2){ //处理的异常方式2 }catch(异常的类型3 变量名3){ //处理的异常方式3 }... finally{ }
说明:
- finally 可选的
- try将可能出现异常的代码包装起来,在执行的过程中,一旦出现异常
会在异常代码出生成对应的异常对象,去catch结构中匹配。其后的代码不在执行 - try结构产生的异常对象,匹配了catch的结构,直接处理对应catch的代码。
处理完之后,继续执行后续代码(没有finally的情况) - catch一般对异常处理的方式
e.printStackTrace();//打印异常信息
e.getMessage();打印异常名 - try-catch-finally结构可以嵌套
- catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错
catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓
异常处理方式二:
- throws +异常类型 写在方法的声明处,指明该方法可能抛出异常
一旦方法体执行时出现异常,仍然在出现异常处产生对应的异常对象,满足
throws抛出的异常,直接抛出,后续代码不在执行。 - throws +异常类型没有处理掉异常的。
- 开发中,如何使用异常处理方式。
throws+异常类型 形式。当方法调用了其他的方法,对于方法异常处理建议采用
如何自定义异常
- 继承存在的异常结构
- 提供全局常量:如
static final long serialVersionUID = -7034897190745766939L;
- 提更必要的构造器