`
leelfcn
  • 浏览: 11438 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java中多个finally返回值的测试

阅读更多
今天对比两个差异的class文件,反编译出的源码中都有两个finally,其中一个带不同的return返回值。记得java描述是说finally中的代码一定会执行,所以觉得应该是只返回最后的finally代码块的值。为了验证结论,简单写了一段代码

public class ReturnValTest{
public static void main(String[] args){
int retVal = getRetVal();
System.out.println("最后的返回值是: " + retVal);
}

public static int getRetVal(){
try{
int n = 1/0;
}catch(Exception e1){
try{
System.out.println("捕获了第一个异常...");
String s = null;
boolean b = s.equals("");
}catch(Exception e2){
System.out.println("捕获了第二个异常(返回值是0)...");
return 0;
}finally{
System.out.println("执行到了第一个finally(返回值是1)...");
return 1;
}
}finally{
System.out.println("执行到了第二个finally(返回值是2)...");
return 2;
}
}
}

运行结果:

捕获了第一个异常...
捕获了第二个异常(返回值是0)...
执行到了第一个finally(返回值是1)...
执行到了第二个finally(返回值是2)...
最后的返回值是: 2

所以catch块和finally块同时有返回值时,返回finally的值;
多个finally块都有返回值时,返回最外层的finally的值。
分享到:
评论
1 楼 loster1209 2014-03-06  
楼主厉害啊

相关推荐

    java线程的run()没有返回值怎么办?

    在Java编程中,线程是程序执行的最小单元,它允许程序同时执行多个任务。通常,我们通过创建Thread对象并重写其`run()`方法来启动一个线程。然而,`run()`方法默认是没有返回值的,即它返回的是`void`类型。这可能在...

    Java编程中影响性能的细节

    总的来说,优化Java性能需要在设计和编码阶段就考虑到资源的使用、内存管理、并发控制等多个方面。理解并合理运用这些细节,有助于编写出更加高效、资源友好的代码。在实际开发中,还可以借助各种工具和库进行性能...

    JAVA初学测试代码

    每个文件都可能是对特定概念的独立测试,或者是多个概念的组合。通过编写和运行这些测试代码,初学者可以深入理解JAVA语言的基本结构和编程范式。同时,通过调试和解决遇到的问题,能提高问题解决能力和编程思维。在...

    java基础测试题(附答案)

    3. **习题训练3** - 构造方法不可被重写(override),但可以重载(overload),即同一个类中可以有多个参数列表不同的构造方法。 4. **习题训练4** - 方法重载的好处在于提供方法名的复用,使得代码更易读,使用...

    java中文api

    接口则定义了一组方法,但不提供实现,类可以实现一个或多个接口。 2. 继承和多态:Java支持单一继承,一个类只能直接继承自一个父类,但可以通过接口实现多继承的效果。多态允许子类对象替换父类对象,提供更灵活的...

    JAVA中Callable的使用

    如果你需要从多个Callable任务中获取结果,可以使用`FutureTask`。`FutureTask`是`Future`的一个具体实现,它同时也是一个`Runnable`,可以直接提交给ExecutorService。`FutureTask`的构造函数接受一个Callable对象...

    java中文API.zip

    2. **异常处理**:Java中的异常处理是通过`try-catch-finally`块实现的,`java.lang.Throwable`是所有异常的基类,包括`Exception`和`Error`。 3. **输入/输出(I/O)**:`java.io`包提供了处理输入和输出的各种类...

    Head First Java 中文高清版.pdf

    11. **多线程**:Java内置了对多线程的支持,通过Thread类和Runnable接口可以实现并发编程。书中会讲解线程的创建、同步和通信。 12. **Java Swing GUI**:Java Swing库提供了丰富的组件和工具,用于创建图形用户...

    JAVA中文API文档

    Java API覆盖了诸如I/O流、集合框架、多线程、网络编程、反射、异常处理、日期与时间、国际化、数学运算等多个关键领域。例如: 1. **集合框架**:Java提供了ArrayList、LinkedList、HashSet、HashMap等多种数据...

    JAVA_API_1.7中文(最新、最全).chm.7z

    12. **异常处理**:Java 7允许在catch子句中捕获多个异常类型,简化了异常处理的代码。 13. **动态语言支持**:Java 7引入了JSR 292,提供了对动态语言的支持,使得Java平台可以更好地运行非静态类型的语言。 通过...

    VB代码转java代码,亲测可用

    转换VB到Java的过程涉及语法、数据类型、控制结构和库函数等多个方面的映射。以下是一些关键点: 1. **语法差异**:VB和Java的语法有显著区别。VB使用缩进和结束关键字(如`End If`)来定义代码块,而Java则依靠大...

    java中“53”个关键字(含2个保留字)

    在Java中,一共有53个关键字,包括两个保留字。下面将详细阐述这些关键字的功能和用途。 1. `abstract` - 用于声明抽象类或抽象方法,表示类不提供具体实现。 2. `assert` - 用于断言某个条件为真,通常用于测试和...

    JAVA经典试题集合

    这些题目涵盖了Java编程语言中的多个核心知识点,包括数据类型的转换、方法重载与覆盖、异常处理和程序流程控制。下面是对这些知识点的详细解释: 1. 数据类型转换:在Java中,运算时会遵循类型提升的原则。当一个...

    java api 中文文档

    Java API中文文档还包含对每个类、接口、方法和构造函数的详细描述,包括它们的用途、参数、返回值和可能抛出的异常。此外,文档通常还包括示例代码,帮助开发者更好地理解如何实际应用这些API。对于Java开发者来说...

    Java异常处理,非常适合Java爱好者

    - **finally带返回值**:在finally块中返回一个值,确保即使在异常情况下也能返回结果。 - **自定义异常**:创建新的异常类,继承自`Exception`或其子类,以适应特定应用的需求。 理解并正确使用Java异常处理能够...

    JAVA入门测试题目

    这只是Java入门测试的一部分,实际题目可能涵盖更多内容,如IO流、多线程、反射、注解、枚举、泛型等。通过深入学习和解答这些题目,你将更好地理解和掌握Java语言的基本概念和编程技巧,为后续的Java开发打下坚实的...

    Java程序员面试题V1.2答案.doc

    该文档涵盖了 Java 编程语言的多个方面,包括构造、重载、super、String 类、StringBuffer 类、DOM、SAX、STAX 等 XML 解析方式、final 修饰符、finally 块、finalize() 方法等。 构造 在 Java 中,构造是指对象的...

    java初级测试题.pdf

    在上述的初级Java测试题中,我们可以看到一系列关于Java基础知识的问题,涵盖类型转换、数组创建、字符串操作、抽象方法、数值类型、类与接口的继承、线程状态以及异常处理等多个方面。 1. 类型转换:Java中的数值...

    JAVA中的保留关键字

    Java中有53个关键字,包括但不限于: - `abstract`:用于声明抽象类和抽象方法。 - `boolean`:表示布尔类型,只有两个可能的值:true 和 false。 - `break`:用于中断循环或switch语句。 - `byte`:一种基本数据...

Global site tag (gtag.js) - Google Analytics