黑马程序员技术交流社区
标题:
对return和finally的疑问?
[打印本页]
作者:
严露华
时间:
2013-5-15 17:56
标题:
对return和finally的疑问?
本帖最后由 严露华 于 2013-5-16 22:37 编辑
public class Test{
public static void main(String[] args) {
System.out.println(t());
}
public static int t(){
int b =40;
try
{
System.out.println("try语句");
return b+=10;
}
catch(Exception e)
{
System.out.println("异常处理语句"+e);
}
finally
{
System.out.println("finally语句");
if(b>45)
{
System.out.println("b>45:"+b);
}
b= 100;
}
return b;
}
}
复制代码
打印结果为
try语句
finally语句
b>45:50
50
为什么结果返回的是50而不是100?为什么只返回try语句中的b值却不返回finally语句块中b的值?
作者:
高新星
时间:
2013-5-15 18:16
是先执行的return语句,所以函数先得到返回值,但是还是会执行finally的
public class Test{
public static void main(String[] args) {
System.out.println(t()); //打印t()返回的值50
}
public static int t(){
int b =40;
try
{
System.out.println("try语句");
return b+=10; //先返回b 的值,再去执行finally ,此时函数的返回值为 50
}
catch(Exception e)
{
System.out.println("异常处理语句"+e);
}
finally
{
System.out.println("finally语句");
if(b>45)
{
System.out.println("b>45:"+b);
}
b= 100;
System.out.println(b); //函数运行后b 的最终值为 100
}
return b;
}
}
复制代码
下面这种情况是先执行finally语句后在 return 此时返回的值 为100
public class Test{
public static void main(String[] args) {
System.out.println(t());
}
public static int t(){
int b =40;
try
{
System.out.println("try语句");
b+=10;
}
catch(Exception e)
{
System.out.println("异常处理语句"+e);
}
finally
{
b= 100;
System.out.println(b); //函数运行后b 的最终值为 100
}
return b;
}
}
复制代码
运行结果为:
try语句
100
100
作者:
王春晓
时间:
2013-5-15 18:19
这跟try、catch、finally、return的执行顺序有关,在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到一个局部变量中去,执行完finally之后,再从中取出返回结果;因此,即使finally中对变量b进行了改变,但是不会影响返回结果。
作者:
xuemeng
时间:
2013-5-15 18:20
public class Demo {
public static void main(String[] args) {
System.out.println(t());
}
public static int t() {
// 程序执行步骤
int b = 40;
try {
// 执行1
System.out.println("try语句");
// 执行2, 这里特别说明, 这里执行了 b += 10, b的值是50, 但是没有return
return b += 10;
} catch (Exception e) {
System.out.println("异常处理语句" + e);
} finally {
// 执行3
System.out.println("finally语句");
// 执行4
if (b > 45) {
System.out.println("b>45:" + b);
}
// 执行5, 这时候b的值是100, 但是执行这个代码后,程序又返回去了, 返回 执行2处 执行return
// 而这里的b是50, 所以最后返回的是50, 而不是100
b = 100;
}
return b;
}
}
如果你想要100, 代码可以做一下修改:
下面的代码, 返回的就是100
public class Demo {
public static void main(String[] args) {
System.out.println(t());
}
public static int t() {
int b = 40;
try {
System.out.println("try语句");
return b += 10;
} catch (Exception e) {
System.out.println("异常处理语句" + e);
} finally {
System.out.println("finally语句");
if (b > 45) {
System.out.println("b>45:" + b);
}
return b = 100;
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2