经典的java中return和finally问题!

经典的java中return和finally问题!

标签:

杂谈

分类: java学习

前一段时间 参加公司的笔试问了这个问题,回来一查才知道当时自己做错了,百思不得其解,上网查到下面的程序,但是运行后发现了错误,我修改后放在了我的blog 上面,希望和大家分享。

代码如下:

public      class      Test
{
public      static      void      main(String[]      args)
{
     System.out.print(tt());
}
public      static      int      tt()
{
     int      b      =      23;
     try
     {
      System.out.println("yes");
      return      b+=88;
     }
     catch(Exception      e)
     {
      System.out.println("error      :      "      +      e);
     }
     finally
     {
      if(b>25)
      {
       System.out.println("b>25      :      "+b);
      }
      System.out.println("finally");
     }
     return      b;
}
}

代码说明:

主要是用来测试return和finally语句到底哪个先执行.在try语句中,返回了b=111; 在finally语句中判断是否大于25,如果大的话就输出大..程序的结果是

yes

b>25        :        111

finally

111

也就是说明finally语句在return语句执行完了以后才执行的.

OK,那么问题来了,如果我把finally语句改成这样呢:

 1 finally
 2      {
 3       if(b>25)
 4       {
 5        System.out.println("b>25      :      "+b);
 6       }
 7       System.out.println("finally");
 8
 9       return 100;
10      }

也就是在finally中加入return 语句,返回不同的值. 那么,返回值到底是原来的b值(88),还是新的这个返回值呢? 废话不多,看结果:

yes

b>25        :        111

finally

100

这样又说明了一个问题,finally语句块里面的return把原来的return给覆盖了!!变成了新的返回值了.

OK,继续闷骚:我把代码改成这样:

 1 try
 2      {
 3       System.out.println("yes");
 4       return      b;
 5      }
 6      catch(Exception      e)
 7      {
 8       System.out.println("error      :      "      +      e);
 9      }
10      finally
11      {
12       if(b>25)
13       {
14        System.out.println("b>25      :      "+b);
15       }
16       System.out.println("finally");
17       b=100;
18      }

也就是把 try中的返回语句改成返回b值,然后在finally中改变b的值. 那么返回结果到底是原来的b值呢, 还是更改过的b值呢?结果如下:

yes

finally

23

说明了一个问题,如果finally语句中没有返回语句覆盖的话,那么原来的返回值就不会变,不管你是不是改变了要返回的那个变量.

最后还是来说说一点点想法,这个机制是不是这样的呢?碰到try语句中的return,那么先把return的值放在某个池中(怎么我也说起池来了,明明根本还不懂的)?       然后执行finally里面的代码块,如果有返回值覆盖语句,就改变先前放在池中的那个值,如果没有,就把那个池中的东西取出来返回出去

经典的java中return和finally问题!

时间: 2024-12-04 14:14:33

经典的java中return和finally问题!的相关文章

java中return与finally的执行顺序

网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的: (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到. (2)在try块中有System.exit(0);这样的语句,System.exit(0);

java中return的作用

return的常用作用有以下两种一种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例:public string functionTest(){ String a = "abc"; return a;}那么这个方法被调用之后就会返回一个值为abc的字符串,string result = functionTest(); 第二种用法是,代码执行到此处终止.比如当代码执行到某个地方会出现几种结果,然后其中一种结果就不能执行后续代码,这时候在那里加上一个retu

java中return语句的用法总结

return算是各大语言的常客,基本上都有return语句,那么在JAVA中,return有什么特殊的地方吗,下面我们来分析下 1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序) 2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句. 但是区别在于,return 语句是否可以返回一个值(这取决与该函数的返回值类型). a.如果函数有返回值类型(即返回值类型不为void ),则必须带有返回相应类型值的return 语句

java中return在Try-Catch中的执行顺序

我们知道return会结束此方法并返回指定值.以及在Try-catch-finally中无论try代码块中有没有异常finally中的代码时都会被执行的.但是如果return包含在try-catch-finally中的try或catch块中会怎样呢? 我们再做个试验: 1 static int txt(){ 2 try { 3 @SuppressWarnings("unused") 4 int a=5/0; 5 7 } catch (Exception e) { 8 System.ou

Java中 return 和finally

1. 最简单的情形 public void main(){ String s = test(); System.out.println("s=[" + s + "]"); } public String test(){ String s = ""; try{ System.out.println("In try"); s += "try," ; }catch(Exception ex){ System.ou

Java中Return和Finally执行顺序的实现

下面这段代码的执行结果是怎样的呢? [java] view plaincopyprint? publc int test(){ int x; try{ x = 1; return x; }catch(Exception e){ x = 2; return x; }finally{ x = 3; } } 相信对Java比较熟悉的朋友马上会说出正确答案:正常返回1,异常返回2.我第一次看到这段代码时,对于finally里面的x=3产生了疑惑,不确定最后返回的x是否变成了3,直到从<深入理解Java虚

JAVA中return的用法

1 public class TestReturn 2 { 3 4 public static void main(String args[]) 5 { 6 TestReturn t = new TestReturn(); 7 t.test1(); 8 System.out.println(t.test2()); 9 int sum=getSum(4,6); 10 System.out.println("sum="+sum); 11 get(4,5); 12 } 13 14 15 pu

java中 return 的使用场景

情景一.Return 在if判断结构或者其他程序结构,例如for.switch中使用.用于阻止程序往下面执行. package lesson15; import java.util.Scanner; public class Test4 { /** * @param args */ public static void main(String[] args) { // 情景一.Return 在if判断结构或者其他程序结构,例如for.switch中使用.用于阻止程序往下面执行. int age=

Java中return返回结果的优先级

在Java开发时,异常处理是非常普遍的.先看这样一道关于异常处理的代码 public static int getNumer() { int a = 1; try { return a; } catch (Exception e) { a = -1; } finally { a = 30; System.out.println(a); } return a; } 当执行System.out.println(getNumer())返回的结果应该是多少?A 30 30B 30 1C 1 30答案是B