Java异常处理深入理解

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 可以用 | 连接,捕获多个异常。

异常有罪,且用且珍惜。不应当把异常处理机制作为流程处理机制来用

你可能感兴趣的:(Java异常处理深入理解)