本文共 896 字,大约阅读时间需要 2 分钟。
理论上,编译器看任何代码都不顺眼,都觉得可能有潜在的问题,所以你即使对所有代码加上try,代码在运行期时也只不过是在正常运行的基础上加一层皮。但是你一旦对一段代码加上try,就等于显示地承诺编译器,对这段代码可能抛出的异常进行捕获而非向上抛出处理。如果是普通异常,编译器要求必须用catch捕获以便进一步处理;如果运行时异常,捕获然后丢弃并且+finally扫尾处理,或者加上catch捕获以便进一步处理。
至于加上finally,则是在不管有没捕获异常,都要进行的“扫尾”处理
使用try-catch-finally时,必须遵循以下几条规则:
①必须在 try 之后添加 catch 或 finally 块,try 块后可同时接 catch 和 finally 块,但至少有一个块。
② 若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
③ catch 块与相应的异常类的类型相关。
④ 一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块。
⑤ 可嵌套 try-catch-finally 结构。
⑥在 try-catch-finally 结构中,可重新抛出异常。
⑦除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。
转载地址:http://rgkgn.baihongyu.com/