当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种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...
这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须掌握的重点知识以及基础测试和入学考试题等,旨在全面覆盖Java基础知识和面试必备技能。 首先,面试问题合集和整理的资料...
Java面试通常涵盖多个方面,包括Java基础知识、编程技能、问题解决能力,以及对Java生态系统和相关技术的理解。以下是一些建议的Java面试准备要点和资源描述: 一、Java基础知识 数据类型、变量与运算符:理解Java...
1. JAVA 基础知识:资源中提到了 JAVA 程序设计总复习题,包括了基础的 JAVA 程序设计知识,如使用 `System.out.print` 输出字符串、使用 `if-else` 语句判断条件等。 2. JAVA 语句和结构:资源中提供了多种 JAVA ...
2. **Java**:Java是一种面向对象的高级编程语言,它的设计目标是简洁、安全和高效。Java吸取了C++的优点,但去除了复杂的多继承和指针,使得编程更为简单。Java的特性包括平台无关性、强大的功能和易于使用。 3. *...
Java 基础知识笔试题及答案 Java 是一种广泛使用的编程语言,它具有强大的功能和灵活性。本资源汇总了 Java 基础知识笔试题及答案,涵盖了 Java 的基本概念、数据类型、运算符、控制结构、函数、数组、集合框架、...
以下是Java笔试题汇总,涵盖了Java的多个方面,包括Java基础、Java面向对象编程、Java多线程、Java网络编程、Java数据库编程等。 Java基础 1. Java的基本数据类型有哪些? 答:byte、short、int、long、float、...
1. Java 语言的特点:Java 语言是一种区分大小写的语言,源文件名与 public 类型的类名必须相同,源文件名的扩展名为 .java 而不是 .jar,源文件中 public 类的数目不限。 2. 栈的特点:栈是一种线性结构,具有后进...
java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一整套练习题 java基础一...
这份资料集主要涵盖Java基础知识、初学者入门指南以及常见的Java面试题,旨在帮助学习者系统地理解和掌握Java的核心概念。 首先,Java基础知识是理解任何Java程序的基础。这包括: 1. **Java环境搭建**:学习如何...
很全面的java基础面试题,给我一个你最常见到的runtime exception abstract class和interface有什么区别
1. **基本语法**:Java语言的语法严谨,包括变量声明、数据类型(如int、double、String等)、运算符(算术、比较、逻辑等)、流程控制(if条件语句、for循环、while循环、switch语句)等。在Test77中,这些基本语法...
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初学者或求职者的笔试题目集,旨在检验和提升他们的Java基础知识。让我们深入探讨一下这些题目可能涵盖的知识点。 1. **Java语法基础**:这包括变量...
这些面试题通常用于测试开发者对Java基础知识的掌握程度。理解JDK与JRE的区别可以帮助开发者理解开发环境和运行环境的不同需求,而`==`和`equals`的使用则涉及到对Java内存模型的理解,这是编写正确、健壮的Java代码...
Java的基础面试题通常涵盖以下几个核心领域: 1. **Java语法**:面试官可能会询问关于基本语法的问题,如变量声明、数据类型(原始类型与引用类型)、运算符、控制流程(if语句、for循环、while循环)、异常处理...