`
wxl24life
  • 浏览: 293526 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

finally块抛异常或者包含return语句时的注意事项

    博客分类:
  • Java
阅读更多

先看两段代码,请试着分别写出它们的输出结果。

 

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

 

0
1
分享到:
评论

相关推荐

    try-catch-finally捕获异常

    下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try块 try块是try-catch-finally语句的核心部分,用于包装可能出现异常的代码。try块中的代码在执行时,如果出现异常,会被catch块捕获和处理。...

    jni方法里面抛出异常

    2. **异常处理**:在Java中,异常处理是通过try-catch-finally语句块实现的,而在C/C++中,错误通常通过返回错误码或抛出异常来表示。JNI中,Java的异常机制无法直接应用于本地代码,因此需要特殊处理。 3. **JNI中...

    Java基本语法第三季

    - 当`try`和`catch`块中包含`return`语句时,`finally`块依然会被执行。 - `finally`块会在`return`语句执行之后,但在实际返回之前执行。 - `finally`块中不应包含`return`语句,否则可能会影响方法的返回值。 ...

    java编程规范

    描述中提到,将`return`语句放在`finally`块内可能会掩盖在`try`块中抛出的异常。当异常发生时,程序会立即返回,而不会显示异常信息,这使得错误分析变得困难。因此,推荐的做法是不要在`finally`块中放置`return`...

    JSTL详细标签库介绍

    能够让系统在出现异常的情况下恢复过来的程序使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)使用异常的注意事项:<BR>...

    C#中的try catch finally用法分析

    即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....

    java面试宝典 吐血推荐,很全面

    - **注意事项**: `finally`块通常用于释放资源,无论`try`或`catch`块中是否发生异常都会执行。 **39. 下面的程序代码输出的结果是多少?** - **知识点**: 缺少具体的代码示例。 **40. final,finally,finalize的...

    Java培训 第03讲 JAVA基本语法(下).ppt

    `try`块包含可能抛出异常的代码,`catch`块处理特定类型的异常,`finally`块确保无论是否发生异常都会执行的代码。 总结来说,这一讲的Java基本语法讲解了控制程序流程的重要元素,这些元素构成了Java程序的基础...

    Python异常处理机制结构实例解析

    4. **finally块中的return问题**:在`finally`块中使用`return`语句会导致`try`或`except`块中的`return`语句失效。例如: ```python def test(): try: return True finally: return False print(test()) #...

    corejava_面试题

    在try块中的return语句不会导致finally块被跳过,不管try块中的return语句或者异常处理如何,finally块总是会在方法返回前执行。 final、finally和finalize的区别: final是一个修饰符,可以修饰类、方法和变量;...

    JavaSE 基础知识总结

    finally块总是被执行,即使try-catch块中有return语句。 **8.6 异常调用栈** 异常发生时,会生成调用栈跟踪信息,帮助开发者定位问题。 **8.7 异常层次** Java异常体系结构由根类Throwable及其子类Error和...

    SCJP-mynote

    - `finally`块总是会在`try`块之后执行,即使`try`块中包含`return`语句也是如此。 - `catch`块必须紧跟在`try`块后面。 - `finally`块必须紧跟在最后一个`catch`块后面。 - `throws`关键字可以用来声明方法可能...

    java面试题集(初级)

    9. **方法覆盖注意事项**:覆盖方法的返回类型、参数列表、方法名必须与被覆盖的方法一致,且覆盖方法的访问级别不能低于被覆盖方法,抛出的异常不能多于被覆盖方法。 10. **try-catch-finally**:即使`try`块中有`...

    简单介绍Python中的try和finally和with方法

    #### 一、try和finally的使用及注意事项 在Python编程中,处理异常是非常重要的一个环节。通过使用`try`和`finally`语句,我们可以有效地管理代码中可能出现的错误,并确保必要的清理工作得到执行。 ##### 1.1 try...

    Python技术错误处理指南.docx

    - **使用finally块:** `finally`块中的代码无论是否发生异常都会被执行,通常用于清理操作,比如关闭文件或数据库连接。 **1.2 示例代码** ```python try: # 可能引发异常的代码 result = 10 / 0 except ...

    Python3.4学习笔记之类型判断,异常处理,终止程序操作小结

    **其他注意事项**: - 在Python中,注释不能单独存在于逻辑代码块(如`if`、`try`等)的一行,需要确保每一行都有有效的代码或者注释。 - 空格和Tab键在Python中用于缩进,它们是有意义的,不正确的缩进会导致语法...

    C# access数据类.txt

    如果执行过程中出现异常,则抛出异常。 - **注意事项**: - 确保数据库连接已打开。 - 使用`try-catch-finally`结构确保资源被正确关闭。 ##### 4.3 执行非查询SQL语句 ```csharp public bool dataExec(string ...

    cs代码-goto 语句

    2. **简化错误处理**:在早期版本的C#中,没有`using`语句块和`try-finally`结构,`goto`常用于清理资源。 ### 缺点与注意事项 1. **代码可读性**:`goto`语句会使代码流程变得复杂,使得其他开发者难以理解程序...

    新版java开发手册(华山版).zip

    《Java开发手册》最新版涵盖了史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、...比如,变量命名示例、卫语句示例、枚举示例、finally的return示例等。

    阿里巴巴Java开发手册1_5_0.zip

    《Java开发手册》更新版,涵盖史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱...比如,变量命名示例、卫语句示例、枚举示例、finally的return示例等。

Global site tag (gtag.js) - Google Analytics