先看两段代码,请试着分别写出它们的输出结果。
1、try-catch 块与 finally 块同时抛异常。
import java.io.IOException; public class ExceptionInFinallyBlock { public static void main(String[] args) { try { try { System.out.print("A"); throw new Exception("1"); } catch(Exception e) { System.out.print("B"); throw new Exception("2"); } finally { System.out.print("C"); throw new IOException("3"); } } catch (Exception e) { System.out.println(e.getMessage()); } } }
2、try-catch 块与 finally 块同时包含 return 语句。
public class ReturnStatementInFinallyBlockTest { public static void main(String[] args) { System.out.println(getReturnValue()); } public static int getReturnValue() { try { System.out.print("A"); return 1; } finally { System.out.print("C"); return 2; } } }
Java标准文档中给出了详细的描述,可以用一句话简单概括上面两个示例执行逻辑:
- 在 finally 块中抛出的任何异常都会覆盖掉在其前面由 try 或者 catch 块抛出异常。包含 return 语句的情形相似。
鉴于此,除必要情况下,应该尽量避免在 finally 块中抛异常或者包含 return 语句。
PS: 实际上,当你把上面两段代码拷贝到 eclipse,会收到 eclipse 的 warning: finally block does not complete normally。
----------------
输出结果:
1、ABC3
2、AC2
本文总结自:SO
相关推荐
下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try块 try块是try-catch-finally语句的核心部分,用于包装可能出现异常的代码。try块中的代码在执行时,如果出现异常,会被catch块捕获和处理。...
2. **异常处理**:在Java中,异常处理是通过try-catch-finally语句块实现的,而在C/C++中,错误通常通过返回错误码或抛出异常来表示。JNI中,Java的异常机制无法直接应用于本地代码,因此需要特殊处理。 3. **JNI中...
- 当`try`和`catch`块中包含`return`语句时,`finally`块依然会被执行。 - `finally`块会在`return`语句执行之后,但在实际返回之前执行。 - `finally`块中不应包含`return`语句,否则可能会影响方法的返回值。 ...
描述中提到,将`return`语句放在`finally`块内可能会掩盖在`try`块中抛出的异常。当异常发生时,程序会立即返回,而不会显示异常信息,这使得错误分析变得困难。因此,推荐的做法是不要在`finally`块中放置`return`...
能够让系统在出现异常的情况下恢复过来的程序使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)使用异常的注意事项:<BR>...
即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....
- **注意事项**: `finally`块通常用于释放资源,无论`try`或`catch`块中是否发生异常都会执行。 **39. 下面的程序代码输出的结果是多少?** - **知识点**: 缺少具体的代码示例。 **40. final,finally,finalize的...
`try`块包含可能抛出异常的代码,`catch`块处理特定类型的异常,`finally`块确保无论是否发生异常都会执行的代码。 总结来说,这一讲的Java基本语法讲解了控制程序流程的重要元素,这些元素构成了Java程序的基础...
4. **finally块中的return问题**:在`finally`块中使用`return`语句会导致`try`或`except`块中的`return`语句失效。例如: ```python def test(): try: return True finally: return False print(test()) #...
在try块中的return语句不会导致finally块被跳过,不管try块中的return语句或者异常处理如何,finally块总是会在方法返回前执行。 final、finally和finalize的区别: final是一个修饰符,可以修饰类、方法和变量;...
finally块总是被执行,即使try-catch块中有return语句。 **8.6 异常调用栈** 异常发生时,会生成调用栈跟踪信息,帮助开发者定位问题。 **8.7 异常层次** Java异常体系结构由根类Throwable及其子类Error和...
- `finally`块总是会在`try`块之后执行,即使`try`块中包含`return`语句也是如此。 - `catch`块必须紧跟在`try`块后面。 - `finally`块必须紧跟在最后一个`catch`块后面。 - `throws`关键字可以用来声明方法可能...
9. **方法覆盖注意事项**:覆盖方法的返回类型、参数列表、方法名必须与被覆盖的方法一致,且覆盖方法的访问级别不能低于被覆盖方法,抛出的异常不能多于被覆盖方法。 10. **try-catch-finally**:即使`try`块中有`...
#### 一、try和finally的使用及注意事项 在Python编程中,处理异常是非常重要的一个环节。通过使用`try`和`finally`语句,我们可以有效地管理代码中可能出现的错误,并确保必要的清理工作得到执行。 ##### 1.1 try...
- **使用finally块:** `finally`块中的代码无论是否发生异常都会被执行,通常用于清理操作,比如关闭文件或数据库连接。 **1.2 示例代码** ```python try: # 可能引发异常的代码 result = 10 / 0 except ...
**其他注意事项**: - 在Python中,注释不能单独存在于逻辑代码块(如`if`、`try`等)的一行,需要确保每一行都有有效的代码或者注释。 - 空格和Tab键在Python中用于缩进,它们是有意义的,不正确的缩进会导致语法...
如果执行过程中出现异常,则抛出异常。 - **注意事项**: - 确保数据库连接已打开。 - 使用`try-catch-finally`结构确保资源被正确关闭。 ##### 4.3 执行非查询SQL语句 ```csharp public bool dataExec(string ...
2. **简化错误处理**:在早期版本的C#中,没有`using`语句块和`try-finally`结构,`goto`常用于清理资源。 ### 缺点与注意事项 1. **代码可读性**:`goto`语句会使代码流程变得复杂,使得其他开发者难以理解程序...
《Java开发手册》最新版涵盖了史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、...比如,变量命名示例、卫语句示例、枚举示例、finally的return示例等。
《Java开发手册》更新版,涵盖史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱...比如,变量命名示例、卫语句示例、枚举示例、finally的return示例等。