`

当return遇到finally

 
阅读更多
在try-catch-finally中, 当return遇到finally:

     1.在try catch块里return的时候,finally也会被执行。

     2.return 语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果   return 的是引用类型的,改动将可以起效果。
     3.finally里的return语句会把try catch块里的return语句效果给覆盖掉。

结论:看来return语句并不一定都是函数的出口,执行return时,只是把return后面的值复制了一份到返回值变量里去了。



建议:
1.最好把return放到方法尾而不要在try cath 里return

2.不要在try catch块和finally块里都包含return

3.如果在try catch块里return, 则不要在finally块里操作被return的变量


分享到:
评论
1 楼 KevinGarnett 2011-03-23  
正遇到这问题,楼主解释的非常好 谢谢

相关推荐

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

    当解释器遇到`return`语句时,它会创建一个包含返回值的对象,并将其存储在一个内部数据结构中。然后,解释器跳转到`finally`块,执行其中的代码。即使在`finally`块中有`return`,原始的`return`语句的返回值也不会...

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

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

    浅谈Java中return和finally的问题

    2. **`return` 与 `finally` 的执行顺序**:在 `try` 块中遇到 `return` 时,会先执行 `finally` 语句块,然后再返回值。这是因为 `finally` 中的代码优先级高于 `return`,即使 `return` 已经被触发,`finally` ...

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

    在Java编程语言中,异常处理机制是...当两者同时存在时,`finally`块的代码总是先执行,但最终的返回值由最后遇到的`return`语句决定。在编写代码时,理解这种行为可以帮助避免意外的程序行为,并确保程序的健壮性。

    使用try-catch-finally处理异常

    当程序运行过程中遇到错误或异常情况时,如果没有妥善处理,可能会导致程序崩溃。Java、C#等许多编程语言提供了异常处理框架,其中“try-catch-finally”是常用的一种结构。下面我们将详细探讨这个主题。 1. **异常...

    finally分析

    这些指令确保即使遇到异常或正常退出,也能正确地执行`__finally`块中的代码。 #### 四、示例解析 假设有一个简单的示例,其中使用了终止处理程序来避免内存泄漏: ```cpp char *p = NULL; __try { p = new char...

    java finally块执行时机全面分析

    首先,`finally`块不会被跳过,除非遇到以下两种极端情况: 1. 程序通过`System.exit()`退出。 2. 由于硬件故障或操作系统干预导致进程被终止。 在正常情况下,`finally`块的执行遵循以下规则: 1. 当`try`块执行...

    python函数中return后的语句一定不会执行吗?

    然而,这个规则并不总是绝对的,特别是当`return`语句处于`try/except/finally`异常处理结构中时。 1. **默认返回值**:如果一个函数没有显式地包含`return`语句,或者`return`后面没有跟任何表达式,那么函数将...

    try catch finally的执行顺序深入分析

    总的来说,`try-catch-finally`结构提供了一种强大的错误处理方式,确保了程序在遇到异常时能够继续执行关键的清理任务,并且控制返回值。理解这个执行顺序对于编写健壮的代码至关重要,特别是在处理资源管理和异常...

    java面试题之try中含return语句时代码的执行顺序详解

    2. 如果遇到`return`语句,会创建一个临时变量,保存`return`语句要返回的值。 3. `finally`块被执行。 4. `finally`块执行完毕后,临时变量的值被返回。 这个规则解释了为何示例代码的输出是0,而不是1,同时也...

    对python中的try、except、finally 执行顺序详解

    在 `except` 中的 `return` 遇到 `finally` 时,`finally` 会被执行,然后返回 `finally` 中的值。 2. **test2()**: 在这个例子中,`try` 块没有引发异常,但 `return` 语句仍然导致 `finally` 的执行。同样,`...

    trycatchfinaly

    当`try` 块内的代码执行过程中遇到异常时,程序将跳过该异常发生后`try` 块内剩余的代码,并进入`catch` 块进行处理。如果`try` 块内没有异常发生,那么程序将按照正常流程执行完`try` 块内的所有代码。 #### 三、...

    C#中的try catch finally用法分析

    总的来说,`try-catch-finally`语句是C#中进行错误处理的核心工具,它使得程序在遇到异常时能够继续执行,而不是直接崩溃,从而提高了程序的健壮性和可靠性。通过熟练掌握这一机制,开发者可以编写出更加稳定且易于...

    面试Java程序员最可能遇到的问题考试大全

    33. **try-finally的执行顺序**:finally中的代码总会在return之前执行。 34. **计算2乘以8**:最简单的方法是`int result = 2 * 8`。 35. **相同的对象,不同的hash code**:错误,对象相等时,hash code应相同。 ...

    ocjp考试题(卷)库.doc

    `try...catch...finally`块中,如果在`try`块中遇到`return`语句,`finally`块会先执行,然后才会执行`return`。所以,代码会打印"Finally",然后返回,不会执行`finally`块后面的语句。因此,正确答案是B。 4. ...

    Java异常处理-异常处理的方式1

    当程序执行过程中遇到异常,会生成一个异常类的对象并抛出。如果这个异常没有被当前方法处理,它会向上层调用者传递,直到找到能够捕获并处理它的代码块,或者到达main()方法。如果main()也不处理,程序就会终止。 ...

    关于Java异常处理机制的深入理解.doc

    异常处理通过`try-catch-finally`块来实现,用于捕获和处理异常,确保程序在遇到错误时仍能保持一定程度的稳定性和可预测性。 首先,`try`块用于包含可能抛出异常的代码。如果在`try`块内发生了异常,控制权将立即...

    java异常处理.doc

    这个例子展示了异常处理的复杂性,特别是当多个嵌套的 `try-catch-finally` 结构存在时。在编写代码时,我们需要谨慎处理异常的传播和处理,确保所有可能抛出异常的代码都包含在 `try` 块中,并适当地捕获和处理异常...

    JAVA中异常处理的WORD文档

    Java中的异常处理是编程实践中必不可少的一部分,它确保了程序在遇到错误或异常情况时能够优雅地处理并继续执行,或者至少提供有用的错误信息。异常处理的主要目的是提高程序的健壮性和稳定性。 1. 为什么需要异常...

    反编译常见问题

    例如,当遇到`break MISSING_BLOCK_LABEL_45;`这样的语句时,它可能表示一个未定义的标签,需要根据上下文找到合适的跳转位置,修复控制流。 处理这些问题的关键是理解原始代码的逻辑,并根据反编译后的代码结构...

Global site tag (gtag.js) - Google Analytics