下面的代码看一下就OK了。
public class tryTest {
public static void main(String[] args) {
try {
tryTest tryTest = new tryTest();
System.out.println(tryTest.test());
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean test() throws Exception {
try {
throw new Exception("Something error");// 1.抛出异常
} catch (Exception e) {// 2.捕获的异常匹配(声明类或其父类),进入控制块
throw e;// 3. throw前控制转移到finally块,执行完后再返回
} finally {
return true;// 4. 控制转移,直接返回,不再返回catch块,吃掉了异常 }
}
}
打印结果为true,main方法捕获不到异常。
也就是说如果在finally块中使用return,continue或break,则会把抛出的异常吃掉。
如果try或catch中有return语句,finally块中的return会覆盖掉try或catch块中的return。
|