作为Java开发者,只有具备面试和面试等扎实的Java基础才能立于不败之地。 在某些情况下,Java语法非常混乱,finally语句和return语句等所谓的“漏洞”最终会返回谁的结果呢? 在中,本篇总结了finally和return在Java中的优先顺序。
代码
package com.github.xuchen gen.other;
//*
*最终返回实例
*作者: kkdhm
*邮箱: xuchengen@gmail.com
*日期: 2019/11/4
*/
publicclassfinallyreturnexample {
publicstaticvoidmain (字符串[ ] args ) {
system.out.println (finally return1);
system.out.println (finally return2);
}
隐私保护功能1 (
try {
throw new RuntimeException (;
}catch(exceptione ) {
返回'捕获';
} finally {
返回'完成';
}
}
私有静态int finally return2(例如
int a=1;
try {
返回a;
}catch(exceptione ) {
a=-1;
} finally {
a=30;
系统. out.println (a;
}
返回a;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.github.xuchen gen.other;
//*
*最终返回实例
*作者: kkdhm
*邮箱: xuchengen@gmail.com
*日期: 2019/11/4
*/
publicclassfinallyreturnexample {
publicstaticvoidmain (字符串[ ] args ) {
system.out.println (finally return1);
system.out.println (finally return2);
}
隐私保护功能1 (
try{
thrownewRuntimeException (
}catch(exceptione ) {
返回'捕获';
}finally{
返回'完成';
}
}
私有状态intfinallyreturn2() {
inta=1;
try{
返回基因;
}catch(exceptione ) {
a=-1;
}finally{
a=30;
系统. out.println (a;
}
返回基因;
}
}
finallyReturn1函数的最终运行结果是finally
finallyReturn2函数的最终执行结果是打印30,该函数返回1
上述问题的本质是,如果try、catch和finally都有return语句,则代码的执行顺序是什么,以及根据哪个值返回?
我们知道,在处理异常时,finally的代码一定会执行。 这由Java编译器决定,毫无疑问,在编译时将try模块的代码与finally模块的代码组合起来,将catch模块的代码与finally模块的代码组合起来。
这样,如果finally模块中有return,则无论try、catch或函数主体中是否有return语句,都会执行finally return返回函数的结果。 因此,该位置的返回优先级最高。
finally没有return的时候是怎么回来的?
此时,在运行try中的模块之后,会有return语句。 实际上,没有返回。 这意味着计算返回中的表达式,将计算结果保存到临时堆栈中,然后执行finally中的语句,最后从临时堆栈中检索上一个结果。
因此,函数的返回值是1而不是30。
一般来说,return语句的位置如下:
公共静态插入获取编号
try {
返回a;
}catch(exceptione ) {
返回b;
} finally {
返回c;
}
返回d;
}
1
2
3
4
5
6
7
8
9
10
publicstaticintgetNumer
try{
返回基因;
}catch(exceptione ) {
返回网络;
}finally{
返回;
}
返回;
}
如果无一例外地抛出,则返回的优先级如下: cad
当然,如果c存在,则d是不可到达的代码,编译将出现以下错误:
exceptioninthread ' main ' Java.lang.error : unresolvedcompilationproblem 3360 unreachable code
1
exceptioninthread ' main ' Java.lang.error : unresolvedcompilationproblem 3360 unreachable code
如果有异常抛出,则返回的优先级如下: cbd
总之,请记住,finally块的return优先级最高,函数体的return优先级最低。