`
jinyanliang
  • 浏览: 307986 次
  • 性别: Icon_minigender_1
  • 来自: 河南开封
社区版块
存档分类
最新评论

经典的java中return和finally问题!

 
阅读更多
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");   
      b=88;
      return      b;   
     }   
     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=88; 在finally语句中判断是否大于25,如果大的话就输出大..程序的结果是

yes

b>25        :        88

finally

88

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

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

finally
     {   
      if(b>25)
      {   
       System.out.println("b>25      :      "+b);   
      }   
      System.out.println("finally");   

      return 100;
     }


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

yes

b>25        :        88

finally

100

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

      OK,继续闷骚:我把代码改成这样:
try
     {   
      System.out.println("yes");   
      return      b;   
     }   
     catch(Exception      e)
     {   
      System.out.println("error      :      "      +      e);   
     }   
     finally
     {   
      if(b>25)
      {   
       System.out.println("b>25      :      "+b);   
      }   
      System.out.println("finally");   
      b=100;
     }

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

yes

b>25        :        23

finally

23

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

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

相关推荐

    java 中finally语句块与return的执行关系

    Java 中 finally 语句块与 return 的执行关系 Java 中的 finally 语句块是用于保证无论出现什么情况,一定要执行的代码块。在 try-catch-finally 结构中,finally 语句块的执行顺序是非常重要的。下面我们来详细...

    浅谈Java中return和finally的问题

    在Java编程语言中,`return` 语句和 `finally` 语句的相互作用是一个重要的概念,尤其是在处理异常处理时。`finally` 语句块通常用于确保某些代码无论是否发生异常都会被执行,而 `return` 语句用于提前结束方法并...

    Java中finally和return的关系实例解析

    Java中finally和return的关系实例解析 Java中finally和return的关系实例解析是Java编程语言中一个重要的知识点。finally语句是Java语言中的一种特殊语句,它用于释放资源、关闭文件、关闭网络连接等操作。return...

    Java的throw和return

    ### Java的throw和return 在Java编程语言中,`...综上所述,`throw`和`return`是Java中非常重要的控制流结构,它们与`finally`块之间有着紧密的联系。正确理解和运用这些概念对于编写健壮可靠的Java程序至关重要。

    Java中finally块执行与return关系深度剖析

    Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。

    Java finally语句到底是在return之前还是之后执行?

    在Java编程语言中,`finally`语句块是一个非常关键的结构,用于确保特定代码无论在任何情况下(包括异常发生或正常返回)都会被执行。这个特性使得`finally`成为处理资源清理,如关闭文件流、数据库连接等操作的理想...

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    Java异常处理中同时有finally和return语句的执行问题

    在涉及finally和return语句时,Java有一些特定的行为规则。 首先,`finally`块中的代码总是会被执行,除非程序在执行到`finally`块之前就退出了JVM(例如通过`System.exit()`)。即使在`try`块或`catch`块中有`...

    Java语言finally语句详解,finally到底是在return之前还是之后执行.zip

    Java语言finally语句详解,finally到底是在return之前还是之后执行.zip

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    try_catch_finally异常处理java

    总的来说,`try-catch-finally`是Java中用于异常处理的核心机制,它保证了程序的稳定性和健壮性。熟练掌握这一技术,对于编写可靠、易于维护的Java代码至关重要。通过不断练习和理解实际示例,开发者可以更好地应对...

    浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    Java 中 finally 语句的执行顺序探讨 在 Java 中,finally 语句的执行顺序是一个常见的探讨话题。很多人都认为 finally 语句一定会被执行,但这是不正确的。在某些情况下,finally 语句可能不会被执行,例如在 try ...

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

    try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return 执行顺序的规则和特点。 首先,我们需要了解 try...

    谈谈Java中try-catch-finally中的return语句

    在Java编程语言中,`try-catch-finally`语句块是异常处理的关键构造,它允许程序员优雅地处理可能出现的异常情况。`return`语句则用于从方法中返回一个值或者结束方法的执行。当这两者结合在一起时,就会出现一些...

    java 入门,适合初学者!

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和强大的库支持而闻名。对于初学者来说,掌握Java的基本概念是踏入编程世界...在Java教程中,你可以找到更多实践练习和详细解释,进一步加深对Java的理解。

    关于Java中try finally return语句的执行顺序浅析

    "Java中try finally return语句的执行顺序浅析" 关于Java中try finally return语句的执行顺序浅析是Java语言中一个重要的知识点,今天我们来探讨一下try finally return语句的执行顺序。 首先,需要了解的是...

    Java中Finally关键字

    Java中的`finally`关键字是异常处理机制的重要组成部分,它的主要作用是确保在程序执行过程中,不论是否发生异常,某些特定的代码段总会被执行。这在处理资源清理、保证程序完整性和防止资源泄露等方面非常关键。 ...

    Java 实例 - Finally的用法源代码-详细教程.zip

    在Java编程语言中,`finally`块是一个非常关键的组成部分,它主要用于确保程序中的某些代码无论在任何情况下都会被执行。这个知识点在Java学习过程中尤为重要,因为它关乎程序的异常处理和资源管理。`finally`通常与...

    关于Java中的try-catch-finally语句和return

     第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四:  1、return语句只在函数后出现一次。  2、return语句仅在try和catch里面都出现。  3、...

    Java软件开发实战 Java基础与案例开发详解 10-5 finally关键字 共7页.pdf

    关于`return`语句的使用,有一个重要的原则:既不在`try`内部使用`return`语句,也不在`finally`内部使用`return`语句,而应该在`finally`语句之后使用`return`来表示函数的结束和返回。 通过以上的详细介绍,我们...

Global site tag (gtag.js) - Google Analytics