`
hxz_qlh
  • 浏览: 8463 次
  • 性别: 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基础试题、笔记

    这些资源包括面试问题合集、整理的资料、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基础面试题 91道.pdf

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

    Java基础知识笔试题及答案

    Java 基础知识笔试题及答案 Java 是一种广泛使用的编程语言,它具有强大的功能和灵活性。本资源汇总了 Java 基础知识笔试题及答案,涵盖了 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入门必看 Java面试题集锦

    这份资料集主要涵盖Java基础知识、初学者入门指南以及常见的Java面试题,旨在帮助学习者系统地理解和掌握Java的核心概念。 首先,Java基础知识是理解任何Java程序的基础。这包括: 1. **Java环境搭建**:学习如何...

    java 基础面试题

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

    浙大Java基础题库Test77题全源程序亲测能用

    1. **基本语法**:Java语言的语法严谨,包括变量声明、数据类型(如int、double、String等)、运算符(算术、比较、逻辑等)、流程控制(if条件语句、for循环、while循环、switch语句)等。在Test77中,这些基本语法...

    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 ...

    Java基础笔试题.doc.zip

    这份“Java基础笔试题.doc.zip”压缩包文件包含了一份针对Java初学者或求职者的笔试题目集,旨在检验和提升他们的Java基础知识。让我们深入探讨一下这些题目可能涵盖的知识点。 1. **Java语法基础**:这包括变量...

    java面试题集锦 java面试题集锦

    这些面试题通常用于测试开发者对Java基础知识的掌握程度。理解JDK与JRE的区别可以帮助开发者理解开发环境和运行环境的不同需求,而`==`和`equals`的使用则涉及到对Java内存模型的理解,这是编写正确、健壮的Java代码...

    java基础面试题

    Java的基础面试题通常涵盖以下几个核心领域: 1. **Java语法**:面试官可能会询问关于基本语法的问题,如变量声明、数据类型(原始类型与引用类型)、运算符、控制流程(if语句、for循环、while循环)、异常处理...

Global site tag (gtag.js) - Google Analytics