`
elan1986
  • 浏览: 168110 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Finally in Java

阅读更多
我们从几个问题开始:
一、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 Edition》By 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 the finally 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语句时,try中return的值会被保存且被返回。
所以,第二个问题的答案是:getValue()返回值为:1
第三个问题的答案是:getValue()返回值为:1
分享到:
评论

相关推荐

    Thinking in java .txt

    《Thinking in Java》第四版由布鲁斯·埃克尔(Bruce Eckel)撰写,他是MindView公司的总裁。这本书被广泛认为是学习Java编程语言的经典教材之一。从读者的反馈来看,《Thinking in Java》不仅覆盖了Java的核心概念...

    Thinking in Java 练习题答案

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书的练习题是学习Java的重要组成部分,因为它们能够帮助读者巩固理论知识并提升实践能力。以下是对"Thinking in ...

    Thinkingin Java电子书

    2. **异常处理**:书中阐述了Java的异常处理机制,如何使用try-catch-finally语句块来捕获和处理程序运行时可能出现的问题,以及如何定义和抛出自定义异常。 3. **集合框架**:《Thinking in Java》深入讨论了Java...

    Thinking in java 电子书

    《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...

    Thinking in Java 习题答案

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书以其详尽的解释、丰富的示例和实践性强的习题深受程序员喜爱。"Thinking in Java 习题答案"是配套的解答集,...

    Introduction to Programming in Java 英文版

    《Introduction to Programming in Java》是Java编程初学者的宝贵资源,尤其因其与知名图书《算法》第四版出自同一作者,其权威性和教育价值不言而喻。这本书详细介绍了Java编程的基础概念,帮助读者掌握编程的基本...

    thinking in java 文档

    《Thinking in Java》是Bruce Eckel的经典著作,它深入浅出地介绍了Java编程语言的核心概念和技术,对于初学者和有经验的程序员都是极好的学习资源。文档内容涵盖了许多关键知识点,包括但不限于: 1. **基础语法**...

    Thinking in Java 4th edition

    3. **异常处理**:书中介绍了Java的异常处理机制,包括try-catch-finally语句块、自定义异常、异常的链式处理等。 4. **集合框架**:Java集合框架是其强大功能的一部分,书中详细讨论了ArrayList、LinkedList、...

    Thinking in java java源代码

    try-catch-finally结构用于捕获和处理异常,throw关键字用于抛出异常,异常类通常继承自java.lang.Throwable。 5. **多线程**:Java内置了对多线程的支持,通过实现Runnable接口或继承Thread类可以创建线程。线程...

    thinking in java 源码

    4. **异常处理**:Java提供了异常处理机制,源码会包含try-catch-finally语句块,以及自定义异常类的实例。学习如何正确地处理运行时错误能提高程序的健壮性。 5. **集合框架**:Java集合框架是存储和操作对象的...

    Think in Java3

    3. **异常处理**:书中详细阐述了Java的异常处理机制,包括try-catch-finally语句块,异常类层次结构,以及如何自定义异常。 4. **集合框架**:Java的集合框架是编程中的重要组成部分,书中讲解了ArrayList、...

    Thinking in java 中文版

    3. **异常处理**:Java提供了丰富的异常处理机制,如try-catch-finally语句块,帮助开发者处理程序运行时可能出现的问题,提高程序的健壮性。 4. **集合框架**:Java集合框架包括List、Set、Map等接口和ArrayList、...

    Thinking in Java中英文2版

    《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。这本书以其全面性、深度和清晰的讲解而受到广大程序员的推崇,无论是初学者还是经验丰富的开发者,都能从中...

    Thing in Java\Thinking in Java 3rd Edition英文版,书后答案及代码

    5. **异常处理**:Java使用try-catch-finally语句块来捕获和处理异常,提供了良好的错误报告机制。 6. **输入/输出流**:Java的I/O系统基于流的概念,包括文件操作、网络通信等。 7. **多线程**:Java内置对多线程...

    think in java source code

    《Think in Java》是Bruce Eckel的经典编程教材,它深入浅出地讲解了Java语言的基础概念和高级特性。源码整理则为读者提供了实践和学习的机会,帮助理解书中的示例和理论。以下是对《Think in Java》源码中一些重要...

    Thinking In Java 练习题答案 第四版

    4. **异常处理**:Java的异常处理机制使得程序更加健壮,学习如何使用try-catch-finally语句块以及不同类型的异常。 5. **输入/输出(I/O)**:理解Java的I/O流,包括字节流、字符流、对象流以及文件操作。 6. **多...

    王者归来之Thinking in java读书笔记

    Java使用try-catch-finally语句块来捕获和处理异常,这有助于编写健壮的代码。《王者归来之经典-Java编程思想读书笔记》会介绍如何有效地使用异常处理机制,防止程序因未预期的错误而崩溃。 函数和方法是代码复用的...

    Thinking In Java 第四版 【练习题答案 完整版】

    《Thinking in Java》是Bruce Eckel的经典之作,它详尽深入地探讨了Java编程语言的各个方面,被广大程序员视为学习Java的权威指南。第四版在原有的基础上进行了更新,以匹配Java语言的最新发展,包括Java SE 5和6的...

    The Thinking in Java Annotated Solution Guide

    2. **异常处理**:Java的异常处理机制是其强大功能的一部分,解答会指导读者如何正确地使用try-catch-finally块,以及何时使用特定类型的异常。 3. **集合框架**:Java的集合框架包括List、Set、Map等接口和...

Global site tag (gtag.js) - Google Analytics