今天对比两个差异的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的值。
分享到:
相关推荐
在Java编程中,线程是程序执行的最小单元,它允许程序同时执行多个任务。通常,我们通过创建Thread对象并重写其`run()`方法来启动一个线程。然而,`run()`方法默认是没有返回值的,即它返回的是`void`类型。这可能在...
总的来说,优化Java性能需要在设计和编码阶段就考虑到资源的使用、内存管理、并发控制等多个方面。理解并合理运用这些细节,有助于编写出更加高效、资源友好的代码。在实际开发中,还可以借助各种工具和库进行性能...
每个文件都可能是对特定概念的独立测试,或者是多个概念的组合。通过编写和运行这些测试代码,初学者可以深入理解JAVA语言的基本结构和编程范式。同时,通过调试和解决遇到的问题,能提高问题解决能力和编程思维。在...
3. **习题训练3** - 构造方法不可被重写(override),但可以重载(overload),即同一个类中可以有多个参数列表不同的构造方法。 4. **习题训练4** - 方法重载的好处在于提供方法名的复用,使得代码更易读,使用...
接口则定义了一组方法,但不提供实现,类可以实现一个或多个接口。 2. 继承和多态:Java支持单一继承,一个类只能直接继承自一个父类,但可以通过接口实现多继承的效果。多态允许子类对象替换父类对象,提供更灵活的...
如果你需要从多个Callable任务中获取结果,可以使用`FutureTask`。`FutureTask`是`Future`的一个具体实现,它同时也是一个`Runnable`,可以直接提交给ExecutorService。`FutureTask`的构造函数接受一个Callable对象...
2. **异常处理**:Java中的异常处理是通过`try-catch-finally`块实现的,`java.lang.Throwable`是所有异常的基类,包括`Exception`和`Error`。 3. **输入/输出(I/O)**:`java.io`包提供了处理输入和输出的各种类...
11. **多线程**:Java内置了对多线程的支持,通过Thread类和Runnable接口可以实现并发编程。书中会讲解线程的创建、同步和通信。 12. **Java Swing GUI**:Java Swing库提供了丰富的组件和工具,用于创建图形用户...
Java API覆盖了诸如I/O流、集合框架、多线程、网络编程、反射、异常处理、日期与时间、国际化、数学运算等多个关键领域。例如: 1. **集合框架**:Java提供了ArrayList、LinkedList、HashSet、HashMap等多种数据...
12. **异常处理**:Java 7允许在catch子句中捕获多个异常类型,简化了异常处理的代码。 13. **动态语言支持**:Java 7引入了JSR 292,提供了对动态语言的支持,使得Java平台可以更好地运行非静态类型的语言。 通过...
转换VB到Java的过程涉及语法、数据类型、控制结构和库函数等多个方面的映射。以下是一些关键点: 1. **语法差异**:VB和Java的语法有显著区别。VB使用缩进和结束关键字(如`End If`)来定义代码块,而Java则依靠大...
在Java中,一共有53个关键字,包括两个保留字。下面将详细阐述这些关键字的功能和用途。 1. `abstract` - 用于声明抽象类或抽象方法,表示类不提供具体实现。 2. `assert` - 用于断言某个条件为真,通常用于测试和...
这些题目涵盖了Java编程语言中的多个核心知识点,包括数据类型的转换、方法重载与覆盖、异常处理和程序流程控制。下面是对这些知识点的详细解释: 1. 数据类型转换:在Java中,运算时会遵循类型提升的原则。当一个...
Java API中文文档还包含对每个类、接口、方法和构造函数的详细描述,包括它们的用途、参数、返回值和可能抛出的异常。此外,文档通常还包括示例代码,帮助开发者更好地理解如何实际应用这些API。对于Java开发者来说...
- **finally带返回值**:在finally块中返回一个值,确保即使在异常情况下也能返回结果。 - **自定义异常**:创建新的异常类,继承自`Exception`或其子类,以适应特定应用的需求。 理解并正确使用Java异常处理能够...
这只是Java入门测试的一部分,实际题目可能涵盖更多内容,如IO流、多线程、反射、注解、枚举、泛型等。通过深入学习和解答这些题目,你将更好地理解和掌握Java语言的基本概念和编程技巧,为后续的Java开发打下坚实的...
该文档涵盖了 Java 编程语言的多个方面,包括构造、重载、super、String 类、StringBuffer 类、DOM、SAX、STAX 等 XML 解析方式、final 修饰符、finally 块、finalize() 方法等。 构造 在 Java 中,构造是指对象的...
在上述的初级Java测试题中,我们可以看到一系列关于Java基础知识的问题,涵盖类型转换、数组创建、字符串操作、抽象方法、数值类型、类与接口的继承、线程状态以及异常处理等多个方面。 1. 类型转换:Java中的数值...
Java中有53个关键字,包括但不限于: - `abstract`:用于声明抽象类和抽象方法。 - `boolean`:表示布尔类型,只有两个可能的值:true 和 false。 - `break`:用于中断循环或switch语句。 - `byte`:一种基本数据...