`
lan13217
  • 浏览: 498245 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java finally与return

    博客分类:
  • Java
阅读更多

 

IA知识库 
flex 
RIA 

我们从几个问题开始:

一、finally一定会执行吗?

 

 

二、下面语句的执行结果是:

public class FinallyTest {

         public static void main(String[] args) {

                   System.out.println("getValue()返回值为:" + getValue());

         }

        

         public static int getValue() {

                   try {

                            return 0;

                   } finally {

                            return 1;

                   }

         }

}

 

 

三、下面语句的执行结果是:

public class FinallyTest {

         public static void main(String[] args) {

                   System.out.println("getValue()返回值为:" + getValue());

         }

        

         public static int getValue() {

                   int i = 1;

                   try {

                            return i;

                   } finally {

                            i++;

                   }

         }

}

 

 

 

首先,第一个问题,答案是否定的。try里面执行了System.exit(0);操作finally就不会执行,另外死机、断电都会导致finally不会执行

 

 

对于后面两个问题,我们先看一下摘自《THE Java™ Programming Language, Fourth EditionBy Ken Arnold, James Gosling, David Holmes中的几段话:

 

 

a finally clause is always entered with a reason. That reason may be that the try code finished normally, that it executed a control flow statement such as return, or that an exception was thrown in code executed in the TRy block. The reason is remembered when the finally clause exits by falling out the bottom. However, if the finally block creates its own reason to leave by executing a control flow statement (such as break or return) or by throwing an exception, that reason supersedes the original one, and the original reason is forgotten. For example, consider the following code:

try {

    // ... do something ...

    return 1;

} finally {

    return 2;

}

 

When the TRy block executes its return, the finally block is entered with the "reason" of returning the value 1. However, inside the finally block the value 2 is returned, so the initial intention is forgotten. In fact, if any of the other code in the try block had thrown an exception, the result would still be to return 2. If thefinally block did not return a value but simply fell out the bottom, the "return the value 1" reason would be remembered and carried out.

 

从红色和蓝色字体标注的解释可以看出,当finally中有return语句的时候,try中的return会被抛弃;当finally中没有return语句时,tryreturn的值会被保存且被返回。

 

 

所以,第二个问题的答案是:getValue()返回值为:1

 

第三个问题的答案是:getValue()返回值为:1

http://hi.baidu.com/freish/blog/item/9c77bf1126f6f670cb80c41d.html

分享到:
评论

相关推荐

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

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

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

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

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

    在Java中,finally语句可以与return语句结合使用,但是它们的执行顺序是非常重要的。finally语句是在try的return语句执行之后,return返回之前执行的。这意味着,如果在try块中执行了return语句,finally语句将在...

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

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

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

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

    Java的throw和return

    #### return与finally的关系 当方法包含`return`语句并且还使用了`finally`块时,需要注意以下行为: 1. **正常执行**:如果没有异常发生,程序会先执行`finally`块中的代码,然后返回结果。 2. **异常发生**:...

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

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

    Android面试复习资料大全(包含java源码)

    17. **Java finally与return执行顺序**:明确finally块和return语句的执行顺序。 **Android相关知识点:** 1. **Android基础**:Activity、Service、BroadcastReceiver、ContentProvider和Fragment的全方位解析。 ...

    浅谈Java中return和finally的问题

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

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

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

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

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

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

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

    Android校招面试指南 2018最新版本

    - **Java finally与return执行顺序**:finally块如何影响方法返回值。 - **Java 8新特性**:如Lambda表达式、Stream API等,这些都是提高开发效率的重要特性。 #### 二、Java并发 - **Java创建线程的三种方式**:...

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

    ### Java软件开发实战:Java基础与案例开发详解之10-5 finally关键字 #### finally关键字的理解及应用场景 在深入探讨`finally`关键字之前,我们先回顾一下Java异常处理的基础概念。异常处理是Java中用于处理程序...

    try_catch_finally异常处理java

    当Java执行到可能抛出异常的代码行时,如果确实发生了异常,那么控制权就会立即转移到与之关联的`catch`块。 `catch`块是用来捕获和处理异常的地方。每个`catch`块都对应一个特定的异常类或者异常类的父类,这样就...

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

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

    Java中Finally关键字

    `finally`的执行规则是,只要`try`或`catch`块被执行,`finally`块就会在它们之后运行,即使在`try`或`catch`中有`return`语句或者抛出未捕获的异常,`finally`块依然会被执行。唯一能阻止`finally`执行的情况是程序...

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

    第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)  第二:finally里面不建议放return语句,根据需要,return语句...

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

    与代码二类似,`finally`块中的`return 0;`会将0放入返回值区域,所以方法返回0,而不考虑`try`块中的`return`。 总结一下,`try-catch-finally`结构中的`return`语句遵循以下规则: 1. 如果`finally`块没有`return...

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

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

Global site tag (gtag.js) - Google Analytics