`
hxz_qlh
  • 浏览: 8508 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

答复: 一道“简单的”Java基础题

 
阅读更多
当Java程序执行try块、catch块时遇到了return语句或throw语句,这两个语句都会导致该方法立即结束,但是系统并不会立即执行这两个语句,而是去寻找该异常处理流程中是否包含了finall块:

如果没有finall块,程序立即执行return语句或throw语句,方法终止;

如果有finally块,系统立即开始执行finally块——只有当finally块执行完成后,系统才会再次跳回来执行try块、catch块里的return或throw语句。如果finally快里没有return或throw语句,特别注意此时系统已经把要返回的变量的值保存了一个副本,即使在finally块里该变量的值再次发生改变,最终finally块执行完后系统返回的还是那个副本的值。而如果finally快里也包含了return或throw语句等导致方法终止的语句,则finally块已经终止了方法,系统将不会跳回去执行try块、catch块里的任何代码。最终返回的值将视finally块里的代码而定。
比较看看下面这个例子就明白了:
public class Test
{
    
    public static void main(String[] args)
    {
        System.out.println("return value of getValue(): " + getValue());
        System.out.println("return value of getString(): " + getString());
    }
    
    public static int getValue()
    {
        int i = 1;
        try
        {
            return i;
        }
        finally
        {
            System.out.println("before finally.i = " + i);
            System.out.println("i :  finally");
            ++i;
            System.out.println("after finally.i = " + i);
        }
    }
    
    public static Person getString()
    {
        Person p = new Person("11");
        try
        {
            System.out.println("before return.p = " + p);
            return p;
        }
        finally
        {
            System.out.println("i :  finally");
            p.setName("22");
            System.out.println("after finnaly.p = " + p);
            return p;
        }
    }
    
    static class Person
    {
        private String name;
        
        public Person(String name)
        {
            this.name = name;
        }
        
        public void setName(String name)
        {
            this.name = name;
        }
        
        public String toString()
        {
            return this.name;
        }
    }
}

打印输出:
before finally.i = 1
i :  finally
after finally.i = 2
return value of getValue(): 1
before return.p = 11
i :  finally
after finnaly.p = 22
return value of getString(): 22
分享到:
评论

相关推荐

    答复: 一道经典线程面试题的4种解法

    标题中的“答复: 一道经典线程面试题的4种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...

    Java项目:考试系统Java基础Gui(java+Gui)

    Java项目“考试系统Java基础Gui”是一个基于Java和GUI技术构建的应用程序,主要目标是实现一个功能完善的在线考试平台。这个系统充分利用了Java语言的强大功能和GUI库,如Java Swing,来提供用户友好的界面和高效的...

    黑马程序员java基础试题、笔记

    这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须掌握的重点知识以及基础测试和入学考试题等,旨在全面覆盖Java基础知识和面试必备技能。 首先,面试问题合集和整理的资料...

    Java面试题合集最新版2024.zip

    Java面试通常涵盖多个方面,包括Java基础知识、编程技能、问题解决能力,以及对Java生态系统和相关技术的理解。以下是一些建议的Java面试准备要点和资源描述: 一、Java基础知识 数据类型、变量与运算符:理解Java...

    JAVA编程题全集(100题及答案)——直接打印

    1. JAVA 基础知识:资源中提到了 JAVA 程序设计总复习题,包括了基础的 JAVA 程序设计知识,如使用 `System.out.print` 输出字符串、使用 `if-else` 语句判断条件等。 2. JAVA 语句和结构:资源中提供了多种 JAVA ...

    Java基础测试题 带答案

    ### Java基础测试题知识点解析 #### 1. Java程序编译输出文件格式 - **知识点**: Java源程序通过编译器编译后,会生成字节码文件,这些文件的扩展名为`.class`。 - **解析**: 在Java编程中,程序员编写的源代码...

    java笔试题库.pdf

    - **解析**:Java源代码经过编译器编译后会生成字节码(.class文件),这种字节码是一种中间代码,可以在任何支持Java虚拟机(JVM)的平台上运行,实现了“一次编写,到处运行”的目标。 3. **下列说法正确的是?*...

    Java基础面试题 91道.pdf

    2. **Java**:Java是一种面向对象的高级编程语言,它的设计目标是简洁、安全和高效。Java吸取了C++的优点,但去除了复杂的多继承和指针,使得编程更为简单。Java的特性包括平台无关性、强大的功能和易于使用。 3. *...

    Java基础知识笔试题及答案

    Java 基础知识笔试题及答案 Java 是一种广泛使用的编程语言,它具有强大的功能和灵活性。本资源汇总了 Java 基础知识笔试题及答案,涵盖了 Java 的基本概念、数据类型、运算符、控制结构、函数、数组、集合框架、...

    经典java基础面试题及答案大汇总.rar

    经典java基础面试题及答案大汇总.rar 经典java基础面试题及答案大汇总.rar 经典java基础面试题及答案大汇总.rar 经典java基础面试题及答案大汇总.rar 经典java基础面试题及答案大汇总.rar 经典java基础面试题及答案...

    JAVA基础编程题(60题及答案)

    ### JAVA基础编程题知识点解析 #### 一、网络通信程序设计 本题要求设计并实现一个简单的网络通信程序,具体包括服务器端程序的设计与实现。客户端程序虽然不做具体要求,但在实际开发过程中也是必不可少的一部分。...

    100家大公司java笔试题汇总

    以下是Java笔试题汇总,涵盖了Java的多个方面,包括Java基础、Java面向对象编程、Java多线程、Java网络编程、Java数据库编程等。 Java基础 1. Java的基本数据类型有哪些? 答:byte、short、int、long、float、...

    java基础试题答案.docx

    1. Java 语言的特点:Java 语言是一种区分大小写的语言,源文件名与 public 类型的类名必须相同,源文件名的扩展名为 .java 而不是 .jar,源文件中 public 类的数目不限。 2. 栈的特点:栈是一种线性结构,具有后进...

    java基础一整套练习题

    java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一...

    java 基础面试题

    很全面的java基础面试题,给我一个你最常见到的runtime exception abstract class和interface有什么区别

    Java算法集题大全.zip

    Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...

    java基础编程题

    java基础题,对初学者有很大的帮助。初学者可以根据自己学到的知识融合习题

    Java基础面试题

    以下是一些常见的Java基础面试题及其详细解答: 1. **Java是什么?** Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems(后被Oracle收购)开发。它的“一次编写,到处运行”(Write Once, Run ...

Global site tag (gtag.js) - Google Analytics