以下用几个简单的例子介绍一下finally的用法:

例子1

public class Test {
    public static void main(String[] args) {
        System.out.println("return value of test(): " + test());
    }

    public static int test() {
        int i = 1;
        try {
            System.out.println("exec try block");
            return i;
        } finally {
            System.out.println("exec finally block");
        }
    }
}

执行结果:

exec try block
exec finally block
return value of test(): 1

  即使try中执行了return,finally依然会执行。如果以上的return i; 替换为System.exit(0); 则finally不会执行,因为虚拟机已经停止了。

例子2

public static int getValue() {
    try {
        return 0;
    } finally {
        return 1;
    }
}    

  以上函数执行返回1。

例子3

public static int getValue() {
    int i = 1;
    try {
        return i;
    } finally {
        i++;
    }
}

  函数返回1。对于try或者catch中的return、throw,这两个控制转义指令(return、throw、break 和 continue 都是控制转移语句)返回的变量会被保存到“本地变量表”中,等finally执行完成后,再将之前保存下来的值通过return、throw将值返回到调用者处。以下再看一个类似的例子:

例子4

public static String test() {
    try {
        System.out.println("try block");
        return test1();
    } finally {
        System.out.println("finally block");
    }
}

public static String test1() {
    System.out.println("return statement");
    return "after return";
}            

执行结果

try block
return statement
finally block

  可见,return语句会先执行,但没有马上返回,这时返回值已经确定下来了(保存到了本地变量表中),接着执行finally,最后再返回。【对throw同理】

最新文章

  1. git: fatal: Not a git repository (or any of the parent directories): .git
  2. 过滤emoji表情
  3. Visual Studio 2010 起始页中 不显示最近使用的项目问题,解决办法
  4. My Game --线段数据
  5. 我的常用mixin 之 lines
  6. “耐撕”团队2016.04.12站立会议
  7. 深度剖析JDK动态代理机制
  8. ERP小金刚Pro专业大比拼: Dynamics,NetSuite和Odoo
  9. Solr 06 - Solr中配置使用IK分词器 (配置schema.xml)
  10. 初读"Thinking in Java"读书笔记之第九章 --- 接口
  11. Detected problems with API compatibility(visit g.co/dev/appcompat for more info)
  12. WPF Chart
  13. DATAPUMP进程查询
  14. C# Asp.net中xml串与对象互相转换
  15. sap hana 数据库 EBS
  16. C#并口热敏小票打印机打印位图包括芯片的写入
  17. Unity3D——SendMessage方法的使用
  18. Techniques for HA IT Management
  19. 《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》
  20. oracle 11g Enterprise Manager配置失败

热门文章

  1. java的无序机制
  2. [題解] luogu p1220 關路燈
  3. JMeter提取和重用作为变量 - 具有更多提取器
  4. scrapy框架中Download Middleware用法
  5. Django (十) 项目部署 1
  6. ecshop文章分类页面调用文章的内容
  7. dos命令安装windows服务
  8. 安卓ListView基础应用
  9. PMP项目管理学习笔记引言(1)——为啥要取得认证?
  10. ThreadLocal应用场景以及源码分析