finally-操作返回值

【我是谁】 【我是谁】     2022-09-20     469

关键词:

Finally中操作返回值会出现一个问题?值没有被改变?

 1   static int M1()
 2         {
 3             int result = 100;
 4             try
 5             {
 6                 result = result + 1;
 7                 //======引发异常的代码==========
 8                 int x = 10, y = 0;
 9                 Console.WriteLine(x / y);
10                 //======引发异常的代码==========
11                 return result;
12             }
13             catch
14             {
15                 Console.WriteLine("catch被执行了");
16                 result = result + 1;
17                 return result;
18             }
19             finally
20             {
21                 Console.WriteLine("====finally被执行了=================");
22                 result = result + 1;
23             }
24         }
View Code

结果是:

为什么会这样呢?不是说finally中的代码无论如何都会被执行吗?那就要看编译器会对我们的代码做了什么?

Reflector反编译的代码:  会把我们要返回的值在try-catch中操作之后赋给一个全局变量,并且返回。finally中也操作了num,但是没有赋值给num4。

 对于引用类型是怎样的呢?这个大家可以试试,我就不写了,比较基础

java示例代码_如何从try、catch和finally返回值

java示例代码_如何从try、catch和finally返回值 查看详情

trycatchfinally执行顺序

...时,finally仍然会执行;3、finally是在return语句执行之后,返回之前执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回... 查看详情

字节码分析finally块对return返回值的影响

...i=2;returni;}finally{i=3;}}相信有点经验的程序员一眼就能说出返回的结果为1,但是您真的知道返回的结果为什么为1吗?下面我们通过分析下当前方法的字节码,来说明为什么。查看字节码命令:javap-verboseclass文件?知识点简单 查看详情

异常处理try...catch...finally执行顺序,以及对返回值得影响(代码片段)

异常处理try...catch...finally执行顺序,以及对返回值得影响1、不管有没有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的,所以函数返回值是根据返... 查看详情

try,finally问题

...finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、final... 查看详情

如果我在 Try 块中返回一个值,Finally 语句中的代码会触发吗?

】如果我在Try块中返回一个值,Finally语句中的代码会触发吗?【英文标题】:WillcodeinaFinallystatementfireifIreturnavalueinaTryblock?【发布时间】:2010-09-2514:19:32【问题描述】:我正在为一位朋友审查一些代码,并说他在try-finally块中使... 查看详情

try--catch--finally中return返回值执行的顺序

1、try块中没有抛出异常,try、catch和finally块中都有return语句 1publicstaticintNoException(){2inti=10;3try{4System.out.println("iintryblockis:"+i);5return--i;6}7catch(Exceptione){8--i;9System.out.println("iincatch- 查看详情

06finally中调整返回对象,但是最终返回值未改变(代码片段)

前言//回个家,还什么都没有做,各种各样的问题... 呵呵呵很久以前的一个问题了,当时写了case,但是没有时间来看 并且当时找了一下jls的相关说明,也没有找到具体的和当前问题有关系的地方,还是理解能力不够 问题来自于hllvmgrou... 查看详情

06finally中调整返回对象,但是最终返回值未改变(代码片段)

前言//回个家,还什么都没有做,各种各样的问题... 呵呵呵很久以前的一个问题了,当时写了case,但是没有时间来看 并且当时找了一下jls的相关说明,也没有找到具体的和当前问题有关系的地方,还是理解能力不够 问题来自于hllvmgrou... 查看详情

try--catch--finally中return返回值执行的顺序(区别)

1、try块中没有抛出异常,try、catch和finally块中都有return语句12345678910111213141516public static int NoException(){         int i=10;   & 查看详情

try-catch-finally(代码片段)

...le)中。待subroutine执行完毕之后,再恢复保留的返回值到操作数栈中,然后通过return或者throw语句将其返回给该方法的调用者。例子1/**finally块的语句在try或catch中的return语句执行之后返回之前执行*/publicclassTest1publicstaticvoidmain(Str... 查看详情

trycatchfinally

...finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、final... 查看详情

06finally中调整返回对象,但是最终返回值未改变(代码片段)

...  RednaxelaFX 2013-06-21直接在finally里用return语句可以干涉返回值,但只是改变显式的局部变量则不改变返回值。finally在执行时,语义上说那个try块里的return语句已经执行完了,只是控制流临返回之前进入finally块里转一... 查看详情

java中,finally在try语句块中的return前执行还是后执行

...finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、final... 查看详情

java中,finally在try语句块中的return前执行还是后执行

...finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、final... 查看详情

trycatchfinally

finally语句块永远不能有return;如果函数带返回值,try和catch语句块必须都要有return;try或catch的return后面的表达式计算完毕,暂存该值;然后进入finally,等待finally执行结束,回到try或catch中返回。finally影响不了返回值。try和catch... 查看详情

try..catch..finally执行顺序return

...finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、final... 查看详情

java面试题-阿辉trycatchfinally,try里有return,finally还执行么?

...ally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在final... 查看详情