一直以为对finally认识很明白了,昨天在看到论坛上的一个小程序犯糊了。
public class FinallyTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new FinallyTest().test());
}
public int test() {
int x = 1;
try {
return x;
} finally {
++ x;
System.out.println("finally");
}
}
}
输出的结果是:
finally
1
原因是因为在return前,执行finally中的语句,但return的内容已经被保存起来了,所以finally中的内容不会对其造成影响。
但是,又有如下情况,着实让人不解:
public class FinallyTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new FinallyTest().test());
}
public int test() {
int x = 1;
try {
return x;
} finally {
++ x;
System.out.println("finally");
return x;
}
}
}
输出结果是:
finally
2
分析原因是因为在返回前,finally中的return语句将返回值改变了。
这也是请教高手和结合自己的理解得出的结论。
高手建议:在try中尽量只进行逻辑处理,返回值尽量在try外边进行操作,这是好的代码规范。除非有特殊情况。
分享到:
相关推荐
`finally`块通常用来放置一些必须执行的清理工作,无论是否发生异常,这部分代码都会被执行。 下面是一个简单的代码示例: ```java try { // 可能抛出异常的代码 int result = divide(10, 0); } catch ...
#### 10.2 认识异常 在Java编程中,**异常**是指程序在运行时遇到的问题或错误状态,这些问题可能是由于编程错误导致的,也可能是由于外部因素(如文件不存在)造成的。Java提供了一套完整的异常处理机制,帮助...
"Java异常处理和最佳实践(含案例分析)" 本文将深入探讨Java中的异常处理机制,讨论如何正确地处理Java异常,避免常见的...通过本文的学习,您将对Java异常处理机制有更加深入的认识,并学会如何正确地处理Java异常。
【随机点名-认识新同学JAVA GUI系统】是一个基于Java图形用户界面(GUI)开发的应用程序,主要用于教育环境中帮助教师或主持人进行随机选取学生参与活动或回答问题。这个系统不仅稳定,而且允许用户自定义界面,例如...
这个“简单JAVA例程(绝对新手实例)”的压缩包文件提供了入门级别的Java代码示例,帮助新手逐步认识和了解Java编程。 首先,让我们来探讨Java的基础知识: 1. **Java语法基础**:Java的语法结构与C++类似,但更加...
7. **异常处理**:C#提供了异常处理机制,通过try-catch-finally语句块捕获和处理运行时可能出现的错误。 8. **集合与泛型**:C#内置了多种集合类型,如数组、ArrayList和LinkedList等。泛型则允许我们创建类型安全...
Java使用try-catch-finally语句块来处理程序运行时可能出现的异常,提高程序的健壮性。 6. **集合框架** Java集合框架包括List、Set、Queue等接口,以及ArrayList、HashSet、LinkedList等实现类,提供数据存储和...
对 Java 异常处理机制有一个全面的认识,深刻理解 Java 异常处理机制,就能更加灵活和有效地在软件开发中应用它。 Java 异常处理机制的实现: 1. 异常(Exception):Java 中的异常用对象来表示。Java 中的异常...
Java提供异常处理机制(try-catch-finally语句),开发者可以学习如何优雅地捕获和处理运行时错误,同时通过使用java.util.logging包或其他第三方日志框架,记录程序运行状态,便于调试和问题定位。 通过深入研究和...
深入理解 final、finally、finalize 浅拷贝和深拷贝 关于四种引用类型 Java 开发最容易忽视的 10 个 Bug Java 浅拷贝和深拷贝 Java 创建对象的五种方式 Exception 和 Error 的区别 for 、foreach 、iterator 三种...
9.2.4用finally保证安全性 9.3异常的向前抛出 9.3.1为什么要向前抛出 9.3.2如何向前抛出 9.4自定义异常 9.4.1为什么需要自定义异常 9.4.2如何自定义异常 9.5小结 第10章Java常用API 10.1数值运算 10.1.1用...
- realize还可以表示“实现梦想”,如:The girl finally realized her dream of becoming an actress. (那个女孩当演员的梦想终于实现了。) - 注意与recognize的区别: - recognize常表示“认出,辨认”或“清楚...
面试官询问你对并发编程下原子性操作的认识,这通常涉及多线程环境下如何保证数据的一致性和完整性。 首先,让我们通过一个简单的例子来理解非原子操作的问题。在`VolatileAtomicThread`类中,我们有一个共享变量`...
通过try-catch-finally语句块,可以在发生异常时执行特定代码,提高程序的健壮性。 这个压缩包提供了Java编程的全面入门指导,从最基础的环境配置到核心的面向对象编程,再到高级的数据结构和异常处理,覆盖了学习...
- **try-catch-finally**:掌握如何使用try-catch-finally块来捕获和处理异常,以及finally块的重要性。 4. **集合框架** - **List、Set与Queue**:了解ArrayList、LinkedList、HashSet、TreeSet等集合类的特性和...
在Delphi编程中,`try...except...finally`语句块用于捕获和处理可能出现的异常,但这个DLL似乎能够绕过这种异常处理机制,导致即使在`try`块内发生异常,也无法按照预期执行`except`或`finally`部分的代码。...
在这个场景中,A想要访问B,但被NAT B拒绝,因为NAT B不认识A。通过共同的朋友Server,A和B可以建立起直接的通信通道。Server作为中介帮助双方交换地址信息,一旦连接建立,Server就不再参与数据传输,允许A和B直接...
- try-catch-finally:学会如何编写异常处理代码块,理解finally块的重要性。 - 自定义异常:创建并抛出自定义异常,以便更好地适应特定的错误情况。 4. **集合框架** - List、Set、Queue和Map接口:了解各种...
这种做法确保了调用者对可能出现的异常有清晰的认识。然而,这可能导致代码效率降低,因为异常处理代码可能会增加,并且可能导致过度耦合,因为每个方法都必须知道并处理所有可能的异常情况。 2. Unchecked异常(如...
* 认识各种 UML 关系及可见性符号,并用工具表示出来。 * 实验结果:建立了多种 UML 图形,并对图形进行了编辑和修改。 五、UML 实验:实验二 UML 类图 * 简述类的定义,以及类的三要素。 * 类的属性和方法的可见...