Java异常管理是通过try、catch、throw、throws、finally进行管理。
try 和 catch类似于“一夫多妻制”,一个try代码块的声明,必须和(一个或多个catch)或finally块相对应。
catch的作用域被限制在"丈夫"声明的语句块中,catch也管不了其他try语句抛出的异常,就是自家的事情还管不了,没空管别人家的。例外情况是在try中嵌套声明try-catch。
// try1
try {
// 丈夫1
try{
// try子块
} catch (Ex e) {
//子媳妇
}
} catch (Ex e) {
//小媳妇
} catch (Ex e) {
//正房
}
//try2
try {
//丈夫2
} finally {
}
try1块有两个媳妇(小媳妇和正房,她们不会管try2的异常,但是会管try子块的异常)。小媳妇为正房的子类,必须声明在正房之前,否则会报已经被捕获的错误。
finally块除了在异常发生之前使用System.exit(0);手动停止程序 和 未进入try块的情况,都会执行。在try中使用 return;return sth; finally块都会执行。。并且在finally中使用return sth;如果基本数据类型,则覆盖返回;若是引用数据类型则修改堆中对象的值返回,这也很好说明了Java只有值传递。
- JDK7对异常添加了新的语法糖
- 带资源的try-catch。也就是说我们不用再手动的处理finally关闭资源或连接了。但是,too young too simple,还是乖乖用显示的关闭吧,虽然建议是用带资源的try-catch.
- 多重捕获。catch 可以用 | 连接,捕获多个异常。
异常有罪,且用且珍惜。不应当把异常处理机制作为流程处理机制来用
网友评论