1 异常概念
- 在程序执行过程中,出现非正常情况,最终会导致JVM的非正常终止
- 在Java面向对象中,异常本身也是一个类
- 异常并不是指语法错误,语法错误编译不通过
1.1Error
严重错误,无法通过处理去解决,程序员不能处理,只能避免,相当绝症
1.2 Exception
继承自Throwable
异常产生后,程序员可以通过代码的方式纠正,使用程序继承运行,是必须要进行的处理
2 异常体系
- 根类 java,long.Throwable有两个子类
error和Exception
2.1 常用方法
- public void printStackTrace(); //打印异常常用信息
3 异常分类
- 编译期异常:checked异常。在编译时期如果没有处理则编译失败
- 运行期异常:runtime异常,在运行时期出现异常
4 异常产生过程解析
4.1产生原理
- 程序执行时,碰到代码的异常
- 交给JVM,异常处理的代码,如果有,抛出异常,如果没有,显示异常信息。
- 显示异常的名称,内容和位置
5 异常处理
5.1 异常处理的五个关键字
try catch finally throw throws
throw抛出异常
在编译程序时,我们必须要考虑程序出现的问题比如调用方法时,方法接受参数,那调用此方法时,必须先对此参数数据类型进行合法判断,数据不合法就要告诉调用者,传入合法的参数
throw new 异常类型(参数)
throw new NullpointerException(“要访问的数组不存在”);
throws new ArrayIndexOutOfBoundsException(“该索引超出范围”)
总结
如果产生问题,throw将问题描述并抛出,并不处理,由调用者处理
- 进行捕获
- 继承将问题声明出去
throws声明异常
将问题标识出来报告给调用者
throws运用在方法声明上,提醒方法调用者来处理异常
格式
方法名()throws 异常1throws异常2{}
try catch捕获异常
语法
try{
//编写可能出现问题的代码
}catch(异常的类型 e){
//记录或打印异常信息
}
try catch finally
finally无论是否发生异常都执行
因为异常引发程序的跳转,导致有些语句无法执行,但在fianll代码块中存放的代码一定会执行
try{
//打开物理文件资源
}catch{
}finally{
}
注意事项
- 多个异常分别处理
try{
}catch(异常1){
}catch(异常2){
}
- 运行时异常,可以处理可以不处理
- 如果父类抛出多个异常,子类在重写父类方法时,抛出和父类相同的异常
- 父类方法没有抛出异常,子类在重写父类方法时,子类产生异常只能捕获异常,不能声明
- 自定义异常,根据自己的业务来定义异常比如年龄负数,成绩负数
定义方法
1自定义编译异常:继承自java.lang.Exception
2自定义运行期异常 继承自java.lang.RunTimeException