首页 > 编程知识 正文

java finally return 执行顺序,java.lang

时间:2023-05-05 02:17:52 阅读:114674 作者:4930

作为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优先级最低。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。