`

经典的java中return和finally问题![转]

    博客分类:
  • java
 
阅读更多
前一段时间参加公司的笔试问了这个问题,回来一查才知道当时自己做错了,百思不得其解,上网查到下面的程序,但是运行后发现了错误,我修改后放在了我的blog 上面,希望和大家分享。
经典的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");
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语句改成这样呢:

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

return 100;
}

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

yes

b>25 : 111

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

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中try finally return语句的执行顺序浅析

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

    java 入门,适合初学者!

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

    java代码转c#

    描述中的"java to c# java to csharp java2c# java代码转c#"进一步强调了转换的目标,表示用户可能已经花费了一定的时间寻找如何将Java代码转换为C#的方法,这可能包括在线搜索、阅读文档或者尝试不同的工具。...

    Java中Finally关键字

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

    Java实现TXT文件转图片

    ### Java实现TXT文件转图片 #### 背景与需求 在特定的应用场景下,将文本文件转换为图像格式的需求可能会出现。例如,在创建电子书、海报或是其他类型的媒体时,有时需要将纯文本信息转化为视觉友好的图像形式。...

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

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

Global site tag (gtag.js) - Google Analytics