源:http://coderbee.net/index.php/java/20110321/456
评:语义上 finally 在return之后执行
以前虽然知道在try finally语句中,即使try块里有return语句,finally语句也会在return语句执行之前执行,却不知道return表达式与finally语句的执行顺序。
public class Test {
public static int a() {
int i = 0;
try {
i++;
return ++i;
} finally {
i++;
System.out.println("finally:" + i);
}
}
public static void main(String[] args) {
System.out.println(a());
}
}
这个语句的输出是 2 而不是 3。
当执行到 return ++i;
jvm是先执行 ++i,把结果 2 存到临时变量,然后在执行finally语句里的 ++i,所以最终的i的值虽然是 3,但方法返回的值却是 2。
其实以前的理解没有错,因为 return ++i; 是一个复合语句了,相当于:
int j = ++i;
return j;
分享到:
相关推荐
在《盛名列车时刻表 v5.1》中,开发者可能已经对可能出现的网络错误、数据格式错误等情况进行了充分的预判和处理,这涉及到Java的异常处理机制,如try-catch-finally语句块的使用。 最后,项目的版本控制和模块化...
Java的try-catch-finally语句用于捕获和处理异常,而日志框架如Log4j则有助于追踪和分析运行时问题。 九、测试与部署 系统开发完成后,需进行单元测试、集成测试和压力测试,确保功能正确性和性能。Java的JUnit和...
try 块包含可能抛出异常的代码,catch 块捕获特定类型的异常并执行相应的处理逻辑,finally 块确保无论是否发生异常,都会执行特定的清理代码,如关闭文件流、释放资源等。 以上就是针对1~3年经验的Java后端开发...
答案:synchronized 关键字用于控制多线程环境中的并发访问,确保同一时刻只有一个线程可以执行特定代码块或方法,以避免数据不一致和竞态条件。死锁是指两个或多个线程相互等待对方释放资源,导致它们都陷入无限期...
try 块包含可能抛出异常的代码,catch 块用于捕获并处理特定类型的异常,finally 块包含需要无论是否发生异常都要执行的代码,如资源释放。异常是程序运行时出现的问题,分为检查型异常(必须处理)和非检查型异常...
- **do-while 语句**:与while语句类似,但循环体至少执行一次,条件检查在循环体后进行。 3. **控制结构的使用** - 控制结构应遵循逻辑清晰、易于理解的原则,避免过于复杂的嵌套。每个控制结构内部的代码块应...
本文将深入探讨C#中的异常处理机制,包括异常的基本概念、如何抛出和捕获异常,以及使用try-catch-finally和using语句等结构来编写健壮的代码。 异常是程序执行过程中发生的错误,通常由运行时环境(如.NET ...
在`try`块中有`return`语句的情况下,`finally`块将在`return`语句执行前被调用。这意味着即使`try`块中存在`return`,`finally`块中的代码仍然会得到执行,这对于确保资源的正确释放至关重要。 #### 27. &符号的...
Java异常处理机制通过try-catch-finally语句块来捕获和处理运行时错误。try块中包含可能抛出异常的代码,catch块用来捕获并处理特定类型的异常,finally块无论是否发生异常都会执行,通常用于释放资源。throw关键字...
在Java中,异常处理机制是通过try-catch-finally语句块实现的。当一个异常在try块中被抛出时,控制权会立即转移到相应的catch块。catch块是用来处理特定类型的异常,而finally块则包含需要在任何情况下都要执行的...
38. 在try块中的return语句执行前,finally块中的代码会被执行。 39. 输出结果可能涉及到多种Java语言结构的理解。 40. final关键字用于变量时,表示该变量不能被修改;finally是try-catch-finally结构中的一部分,...
它基于`Monitor`类,确保同一时刻只有一个线程可以执行锁定的代码块: ```csharp object obj = new object(); lock (obj) { // 共享资源的代码 } ``` 这里,`obj`作为锁对象,确保同一时间只有一个线程能执行该...
8. **异常处理**:Java异常处理通过try-catch-finally语句实现。JVM会维护一个异常表,记录异常处理的范围和对应的动作。 9. **多线程**:JVM支持多线程并发,线程间通信可以通过共享内存或消息传递实现。...
try块用于包含可能抛出异常的代码,catch块用于捕获并处理异常,finally块确保在任何情况下都会执行的代码,无论是否发生异常。throw语句用于手动抛出一个异常。 3. 数据库访问命名空间: 在C#中,访问Sql Server...
- **finally**:异常处理块中的一个关键字,确保在try-catch语句执行完毕后,finally块内的代码总会被执行,即使程序提前退出或抛出异常。 - **finalize**:一个方法,在对象被垃圾回收前由垃圾回收器调用,允许程序...
try-catch-finally语句的执行顺序如下: 1. 首先执行try块中的代码。 2. 如果try块中发生异常,则跳转到catch块进行处理。 3. 不论是否发生异常,finally块中的代码都会被执行。 4. 如果try或catch块中有return语句...
异常处理通过try...catch...finally语句实现,可以捕获并处理运行时错误。 JavaScript支持对象实例化,基础类型通过值进行赋值,对象类型则是通过引用。全局对象和局部对象也有特定的用法,如arguments对象在函数...
7. **异常处理**:考虑到通信中断、数据错误等情况,VB的Try...Catch...Finally语句可用于捕获并处理可能出现的异常,确保程序的稳定运行。 8. **实时更新**:系统需实时显示吊瓶速度,这需要定时器组件(Timer)来...
// 临界区代码,同一时刻只有一个线程能执行 } } ``` 2. Monitor类:`Monitor.Enter`和`Monitor.Exit`方法可以实现线程互斥,或者使用`using`语句块简化代码: ```csharp private object resource = new object...