在编写程序时,经常可能出现的错误的地方加上代码检测,如x/y时候检测分母是否为0,数据为空,输入的为字符串等,如果if过多会导致代码加长臃肿,可读性差,因此采用异常处理机制
1. java异常处理
java常用的异常处理机制,是将异常处理的程序代码集中在一起,与正常的代码分开,使得程序简洁、优雅、并易于维护
2. 异常的处理:抓抛模型
过程一:“抛”:程序在正常执行时,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。
并将此对象抛出,一旦抛出对象以后,其后的代码不再执行
过程二:“抓”:可以理解为异常处理方式
3. java异常处理的方式:
①方式一:try-catch-finally(自己解决)
try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式1
System.out.println(e.getMessage());返回string
E.printStackTrace();较常用
}
catch(异常类型2变量名2){
//处理异常的方式2
}
catch(异常类型3 变量名3){
//处理异常的方式3
}
……
finally{
//一定会执行的代码
//就算是catch出现异常也会执行
//像数据库,输入输出流,网络编程socket等资源,jvm不能自动的回收,我们需要自己手动的进行资源的释放,此时资源的释放就需要声明在finally中
}
说明:
使用try-catch-finally将编译时候异常可能出现的异常延迟到运行时出现
②方式二:throws+异常处理(向上报)
一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类对象,此对象满足throw后异常类型时,抛出。异常后续代码不被执行
4. 开发中如何选择哪种方式处理异常?
如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法有异常,必须使用try-catch-finally处理
- 执行方法a调用其他的方法,并且是递归的关系,那么使用throws,方法a可try-catch-finally
- throws只是将异常抛给方法的调用者,并没有真正将异常处理掉
- 方法重写规则之一:子类重写的方法抛出的类型不大于父类被重写抛出的异常
- throws+异常处理 写在方法的声明出,指明此方法执行时,可能抛出的异常类型
- finally不一定要写
- try出现异常,出现异常类,后面不再执行,直接跳catch,继续执行后面的代码
- catch中的异常类型如果没有子父类关系,则谁声明在上谁声明在下无所谓
- 如果有子父类关系,则要求子类一定声明在父类的上面,否则报错
- 在try结构中声明的变量出了try结构不能被调用
- try-catch-finally可以嵌套
- 开发中由于运行时异常比较常见 ,我们通常不针对运行时异常编写try-catch-finally
- 针对编译时异常,我们说一定要考虑异常的处理·