异常的概念
throwable:异常,程序非正常执行的情况
error:错误,程序非正常执行的情况,这种问题不能处理,或不应该处理
exception:例外,程序非正常执行的情况,这种问题可以通过处理
java是面向对象的所有的异常问题,都是用对象表示
异常产生的原因,为什么需要产生异常。
---》程序代码不能正常的产生结果的时候---》产生异常
一、产生异常方式
1)表达式产生 例如:a/b, 除数为0
2)方法调用产生 例如:str.charAt(idx),下标越界
3)手动产生异常 语法:throw 异常对象(exception及子类型的对象)
二、java异常处理方式
1)throws:抛出异常给上级(方法的调用者)处理
2)try catch:方法自己处理异常
throws语法
访问修饰符 返回值类型 方法名(参数列表)[throws 异常类1,异常类2...]{}
throws注意点
1)throws跟的异常是方法【可能出现】的异常
2)如果方法throw里一个异常,那么可以throws异常类自己,或其超类型
3)如果方法都throws异常,最后main也throws异常,那么异常会交给jvm处理
jvm处理:a)打印异常的详细信息 b)停止线程(程序)
三、throws和重写的关系
重写语法:
1)方法签名:子类型==超类型
2)返回值类型:
a)基本类型和void:子类型==超类型
b)引用类型:子类型<=超类型
3)访问修饰符: 子类型>=超类型
不能为private
4)throws异常列表:
子类型<=超类型
<=:指异常类的大小,更异常类的个数无关。
exception或runtimeException关系
exception:例外,程序非正常执行的情况,这种问题可以通过处理
runtimeException:例外,程序非正常执行的情况,这种问题可以通过处理,方法
都默认对该异常进行处理,throws 了该异常。
四、自定义异常
作用?———》可以更加准确的通过类名描述异常的信息。
语法:
1)类名:异常信息+Exception
2)继承:exception或runtimeException
3)构造器:空构造和初始化异常消息的构造器
五、try catch:自己处理异常
语法1:
try{
//监听可能出现的异常代码
}catch(异常类 变量){
//捕获到对应异常执行的代码
}...
try:监听可能出现的异常代码
catch:捕获到对应异常执行的代码
执行流程
a)有异常
1)有对应catch:执行try的代码遇到异常位置,后面代码不执行,执行对应的catch,
再离开try catch结构。
2)没有对应catch:执行try的代码遇到异常位置,后面代码不执行,直接把异常抛出,交给
方法的上级。
b)无异常:执行try的所有代码,然后离开try catch结构。
语法2:
try{
//监听可能出现的异常代码
}catch(异常类 变量){
//捕获到对应异常执行的代码
}...
finally{
//一定执行的代码
}
try:监听可能出现的异常代码
catch:捕获到对应异常执行的代码
finally:一定执行的代码(释放资源--流:关闭管道,数据库连接关闭,网络连接关闭),无论是否有异常都会执行,方法提前return,throw也会执行。
执行流程
a)有异常
1)有对应catch:执行try的代码遇到异常位置,后面代码不执行,执行对应的catch,
再执行finally,再离开try catch结构。
2)没有对应catch:执行try的代码遇到异常位置,后面代码不执行,再执行finally,直接把异常抛出,交给
方法的上级。
b)无异常:执行try的所有代码,再执行finally,然后离开try catch结构。