
看代码说结果并简述理由:
public class Main { public static int testFinally() { int a = 1; try { if (a == 1) { throw new RuntimeException("REA"); } } finally { if (a == ) { throw new RuntimeException("REB"); } a = 2; } return a; } public static void main (String args[]) { System.out.println(testFinally()); } } 1 knightdf Aug 30, 2016 抛出 finally 里的异常呗 |
5 YORYOR Aug 30, 2016 finally 里面的异常没有被捕获,直接抛异常 REB 了 |
6 xjp Aug 30, 2016 抛出 REB |
8 yangff Aug 30, 2016 编译失败……? |
9 yangff Aug 30, 2016 哦不会 |
10 xuhaoyangx Aug 30, 2016 第一次抛出异常,因为没有相关 catch ,会直接自行 finally 的内容,然后就是抛出 REB 。结果 REB |
11 dtfm Aug 30, 2016 我感觉这道题是不是出题人弄错了,我见过很多相似的题目,但考点都是考察 finaly 和 try catch 优先级的 |
12 clearbug Aug 30, 2016 是啊,这题没有什么疑问呀。。初学 Java 的都能看懂要抛出 REB 了。 IDEA 亲测也是如此 |
13 kyzylsy Aug 30, 2016 无事水 |
14 F1ReKing Aug 30, 2016 抛出 REB |
15 depress Aug 30, 2016 via Android 这道题的考察点分明是最后打印的是 1 还是 2 ,楼上都在干什么。。。 |
17 kingoldlucky Aug 30, 2016 REB |
18 q397064399 Aug 30, 2016 REB 无疑, try 语句执行后,无论什么情况, finally 语句都要被执行,但是 finally 抛出异常后,整个程序就 REB ,因为没有其它程序路径了 |
19 kumobot OP @q397064399 为什么没有打印出 REA 的异常信息呢 |
20 q397064399 Aug 30, 2016 @kumobot 没有说不打印 REA 作为 try 语句,有异常肯定会抛出 抛出之后呢? finally 总是要被执行的就是了 |
21 8bit Aug 30, 2016 这样考才是真有点迷惑性 public class Main { public static int testFinally() { int a = 1; try { if (a == 1) { throw new RuntimeException("REA"); } a = 2; return a; } finally { if (a == 1) { throw new RuntimeException("REB"); } } } public static void main (String args[]) { System.out.println(testFinally()); } } |
22 msg7086 Aug 30, 2016 finally 抢抛了。 正常的执行流程是 异常发生 -> finally -> 向上传递异常 然而 finally 里抛了异常,就变成了 REA 发生 -> finally -> REB 发生 -> 向上传递 REB 了。 |
25 colatin Aug 31, 2016 这种问题都值得讨论,看来 java 在 v2 不受待见啊 |
27 paragon Sep 2, 2016 这就考察递归的功力了~ |