一道关于 finally 子句的 Java 面试题目

2016-08-30 17:37:03 +08:00
 kumobot

看代码说结果并简述理由:

public class Main {
    public static int testFinally() {
        int a = 1;
        try {
            if (a == 1) {
                throw new RuntimeException("REA");
            }
        } finally {
            if (a == 1) {
                throw new RuntimeException("REB");
            }
            a = 2;
        }
        return a;
    }
    public static void main (String args[]) {
        System.out.println(testFinally());
    }
}

4370 次点击
所在节点    Java
28 条回复
knightdf
2016-08-30 17:49:41 +08:00
抛出 finally 里的异常呗
kumobot
2016-08-30 17:52:32 +08:00
@knightdf 为什么呢
lixia625
2016-08-30 17:56:16 +08:00
@kumobot
因为执行到了抛出异常那一行 然后就抛出异常。 -_-!
knightdf
2016-08-30 18:00:44 +08:00
@kumobot 因为 finally 里就是一正常语句啊。。你还可以在 finally 里再 try catch 呢 - -
YORYOR
2016-08-30 18:04:56 +08:00
finally 里面的异常没有被捕获,直接抛异常 REB 了
xjp
2016-08-30 18:44:35 +08:00
抛出 REB
zts1993
2016-08-30 19:11:22 +08:00
yangff
2016-08-30 19:15:02 +08:00
编译失败……?
yangff
2016-08-30 19:16:34 +08:00
哦不会
xuhaoyangx
2016-08-30 19:46:56 +08:00
第一次抛出异常,因为没有相关 catch ,会直接自行 finally 的内容,然后就是抛出 REB 。结果 REB
dtfm
2016-08-30 19:50:49 +08:00
我感觉这道题是不是出题人弄错了,我见过很多相似的题目,但考点都是考察 finaly 和 try catch 优先级的
clearbug
2016-08-30 20:22:57 +08:00
是啊,这题没有什么疑问呀。。初学 Java 的都能看懂要抛出 REB 了。 IDEA 亲测也是如此
kyzylsy
2016-08-30 20:23:46 +08:00
无事水😪
F1ReKing
2016-08-30 20:34:23 +08:00
抛出 REB
depress
2016-08-30 20:36:34 +08:00
这道题的考察点分明是最后打印的是 1 还是 2 ,楼上都在干什么。。。
depress
2016-08-30 20:47:14 +08:00
@depress 。。。那个啥,抛异常想成 print 了,我上边啥也没说。。。
kingoldlucky
2016-08-30 21:31:24 +08:00
REB
q397064399
2016-08-30 21:37:05 +08:00
REB 无疑,
try 语句执行后,无论什么情况, finally 语句都要被执行,但是 finally 抛出异常后,整个程序就 REB ,因为没有其它程序路径了
kumobot
2016-08-30 22:12:17 +08:00
@q397064399 为什么没有打印出 REA 的异常信息呢
q397064399
2016-08-30 22:30:52 +08:00
@kumobot 没有说不打印 REA 作为 try 语句,有异常肯定会抛出 抛出之后呢?
finally 总是要被执行的就是了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/302726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX