1、异常
什么是异常?Java代码在运行时期发生的问题就是异常。
比如:空指针异常,数组越界异常,类型转换异常
异常的继承体系
在Java中使用Exception类来描述异常。
Exception 类及其子类是 Throwable 的一种形式
Exception是异常类
Throwable有两个子类,一个Error(是错误//只能修改代码来处理),
一个Exception(是异常//)
抛出异常throw
它用来抛出一个指定的异常对象
1,创建一个异常对象。比如:空指针异常,数组越界异常,类型转换异常
使用格式:
throw new 异常类名(参数);
声明异常throws
声明异常格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2… { }
需要配合使用
案列:
异常分为可处理和不可处理,可处理的处理,处理不了的终止
捕获异常try…catch…finally
捕获异常格式:
try {
//需要被检测的语句。
}
catch(异常类 变量) { //参数。
//异常的处理语句。
}
finally {
//一定会被执行的语句。//出不出错都要执行
}
效果:这是自己处理的
如果有多个catch一定要注意顺序,总父类在最后一个catch
两种处理方式:自己处理的不会结束接下来的代码运行,虚拟机处理的第一步就是停止代码运行,然后在控制台报错
try…catch…finally异常处理的组合方式
l try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。
l try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理。
l 一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。
l try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。
运行时期异常
l RuntimeException和他的所有子类异常,都属于运行时期异常。NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时期异常.
l 运行时期异常的特点:
n 方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常
n 运行时期异常一旦发生,需要程序人员修改源代码.
异常在方法重写中细节
子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或不写。
父类没有抛异常子类不能抛
当在子类重写时,父类没有抛,子类调用了抛异常的方式,只能掉用try catch finally方法来解决子类的异常
异常中常用方法
l getMessage方法:返回该异常的详细信息字符串,即异常提示信息
l toString方法:返回该异常的名称与详细信息字符串
l printStackTrace:在控制台输出该异常的名称与详细信息字符串、异常出现的代码位置
2、自定义异常
定义一个类
引用类
异常捕获
异常产生原因