一、什么是异常处理?
我们做的程序需要有健壮性,即,程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。
异常处理(ExceptionHandling)就是一种解决这一问题的机制,当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。
二、使用if…else做异常处理
if(一切正常){
//业务实现代码…
}
else{
alert 输入不合法
goto retry
}
但是“一切正常”是很抽象的,无法转换成计算机可识别的代码,于是,出现:如果程序可以顺序完成,则“一切正常”。把系统的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch块中处理。
常见语法结构:
try{
//业务实现代码…
}
catch(Exception e){
alert 输入不合法
goto retry
}
三、关于try catch finally
如果执行try块的业务逻辑代码出现异常,系统会自动生成一个异常对象,该异常对象被提交给Java运行时环境,称为抛出(throw)异常。
Java运行时环境收到异常对象,会寻找处理改异常对象的catch块,如果找到合适的catch块,则把该异常对象交给catch块处理,称为捕获(catch)异常;如果找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。
有时,程序在try块中打开了一些物理资源(数据库连接,网络连接,磁盘文件等)这些物理资源需要被显式回收。那么,在哪里回收呢?
在Java的垃圾回收机制?NO,Java的垃圾回收机制只能回收堆内存中对象所占内存。
在try块中回收?NO,当某语句执行时出现异常,该语句后面的其他语句不会获得执行机会,则该语句之后的资源得不到回收语句的执行,不能被回收。
在catch块中回收?NO,catch块完全有可能得不到执行,物理资源仍可能不能及时被回收。
所以,finally出现了~总会被执行!
finally块位于所有的catch块后,无论try块是否出现异常, catch块是否被执行,或try,catch块中执行了return语句,finally都会被执行!
try{
//业务实现代码…
}
catch(Exception e){
//异常处理块1
}
Catch(Exception e){
//异常处理块2
}
finally{
//资源回收块
}
四、当异常处理遇到return
通常情况下,一旦在方法里执行到return语句的地方,程序将立即结束该方法,但在异常处理中,仍会先执行完finally块中的代码,才会执行try ,catch中的return语句。所以,尽量不要在finally块中使用return或throw等导致方法终止的语句,一旦使用,将会导致try块,catch块中的return、throw语句失效,得不到执行。
以上是对异常处理中try块,catch块,finally块的简单的介绍,在后面的博客中,会加入本人更深入的理解,敬请期待。