`
lansuiyun
  • 浏览: 28441 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

try catch finally 代码执行(转)

 
阅读更多

    当Java程序执行try块、catch块时遇到了return语句或throw语句,这两个语句都会导致该方法立即结束,但是系统并不会立即执行这两个语句,而是去寻找该异常处理流程中是否包含了finall块: 

如果没有finall块,程序立即执行return语句或throw语句,方法终止; 

如果有finally块,系统立即开始执行finally块——只有当finally块执行完成后,系统才会再次跳回来执行try块、catch块里的return或throw语句。如果finally快里没有return或throw语句,特别注意此时系统已经把要返回的变量的值保存了一个副本,即使在finally块里该变量的值再次发生改变,最终finally块执行完后系统返回的还是那个副本的值。而如果finally快里也包含了return或throw语句等导致方法终止的语句,则finally块已经终止了方法,系统将不会跳回去执行try块、catch块里的任何代码。最终返回的值将视finally块里的代码而定。

比较看看下面这个例子就明白了:

public class Test
{
    
    public static void main(String[] args)
    {
        System.out.println("return value of getValue(): " + getValue());
        System.out.println("return value of getString(): " + getString());
    }
    
    public static int getValue()
    {
        int i = 1;
        try
        {
            return i;
        }
        finally
        {
            System.out.println("before finally.i = " + i);
            System.out.println("i :  finally");
            ++i;
            System.out.println("after finally.i = " + i);
        }
    }
    
    public static Person getString()
    {
        Person p = new Person("11");
        try
        {
            System.out.println("before return.p = " + p);
            return p;
        }
        finally
        {
            System.out.println("i :  finally");
            p.setName("22");
            System.out.println("after finnaly.p = " + p);
            return p;
        }
    }
    
    static class Person
    {
        private String name;
        
        public Person(String name)
        {
            this.name = name;
        }
        
        public void setName(String name)
        {
            this.name = name;
        }
        
        public String toString()
        {
            return this.name;
        }
    }
}
 
分享到:
评论

相关推荐

    try 与 catch finally关键字

    Java的 try 与 catch finally关键字的使用

    使用try-catch-finally处理异常

    `finally`块是可选的,无论`try`和`catch`块中的代码是否抛出异常,`finally`块里的代码都会被执行。这通常用于资源清理,如关闭文件流、网络连接等。即使在`try`或`catch`块中有return语句,`finally`块的代码也会...

    try_catch_finally异常处理java

    即使`try`或`catch`块中存在`return`语句,`finally`块的代码也会被执行。这确保了程序的整洁和资源的有效管理。 在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许...

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序的规则是:try 语句用于包装可能抛出异常的代码,catch 语句用于捕捉 try 语句中的异常,finally 语句用于执行一些清理工作,return 语句用于从方法中返回值。finally 语句是在...

    try-catch-finally捕获异常

    1. try块中的代码执行时,如果出现异常,会跳转到catch块。 2. catch块捕获到异常后,执行异常处理代码。 3. 无论try块中是否出现异常,最终都会执行finally块。 4. finally块执行完毕后,程序继续执行下一条语句。 ...

    VB.NET Try Catch Finally用法演示源码.rar

    VB.NET 演示带Finally的Try Catch 异常处理用法...使用Finally的好处是,把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。

    Java try catch finally异常处理组合详解

    Java try catch finally异常处理组合详解 Java try catch finally异常处理组합是Java语言中的异常处理机制,用于捕获和处理程序中的异常。下面对try catch finally异常处理组合进行详细的介绍。 try catch组合: ...

    17.javatry…catch…finally语句.zip

    17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...

    try catch finally的执行顺序深入分析

    如果在`try`块中的代码没有发生任何异常,那么`catch`块将不会被执行,程序会直接跳到`finally`块。 如果`try`块中的代码确实抛出了一个异常,那么相应的`catch`块会被执行。`catch`块通常包含处理特定异常的代码,...

    java try…catch嵌套捕获异常的实例

    在这个结构中,`try`块包含可能会抛出异常的代码,每个`catch`块分别捕获不同类型的异常,`finally`块则包含需要无论发生何种情况都必须执行的代码,如资源清理。 接下来,我们来探讨嵌套的`try-catch`块。当一个`...

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    java中try catch的用法

    `finally`块用于存放必须执行的代码,无论`try`块中是否发生异常,`finally`块中的代码都会被执行。这使得`finally`块成为释放资源的理想位置,例如关闭文件流或数据库连接等。 #### 五、多catch块 当程序中可能...

    trycatch.zip

    总之,"trycatch.zip"中的示例展示了如何在Golang中模仿`try...catch`和`try...catch...finally`结构,通过自定义的函数和闭包实现了异常处理功能,这对于编写需要优雅处理错误的Golang代码来说非常有用。

    C#中的try catch finally用法分析

    当在`try`块内的代码执行过程中出现异常时,控制权会立即转移到与之相关的`catch`块。如果没有异常发生,`catch`块的代码则不会被执行。 ```csharp try { // 可能抛出异常的代码 } ``` 2. `catch`块: `catch`块...

    try-catch-finally执行顺序验证

    try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...

    C++异常处理技巧try/catch/throw/finally/exception

    通过合理地使用`try`、`catch`、`throw`和`exception`等关键字,开发者不仅能够编写更加可靠的代码,还能显著提升程序的可维护性和可读性。 #### 二、C++标准异常处理 ##### 1. 构造和析构中的异常抛出 在C++中,...

    C# 中的try catch finall 的使用方法

    通过`try-catch-finally`,开发者可以更好地控制程序的异常流程,提高代码的稳定性和可靠性。在阅读`try catch使用说明.txt`文件和使用`trycf.snippet`代码片段时,可以更深入地理解这一机制,并将其应用到自己的C#...

    try-catch的用法和含义

    当程序执行到 `try` 块中的代码时,如果未发生任何异常,则程序将继续正常执行;一旦出现异常,控制权将立即转移到与该异常类型匹配的第一个 `catch` 块。如果没有与异常类型匹配的 `catch` 块,则程序会继续向上抛...

    try-catch-finally-return-in-finally.rar_return

    `finally` 块则是一个可选的块,无论 `try` 或 `catch` 是否执行成功,都会执行 `finally` 中的代码。它通常用来存放清理资源或执行必要操作的代码,如关闭文件流或释放内存。`finally` 的重要性在于,即使 `try` 或...

    java try…catch捕获异常的实例

    即使在`try`或`catch`块中有`return`语句,`finally`块中的代码也会被执行: ```java try { // 代码 } catch (ExceptionType1 e1) { // 处理 } catch (ExceptionType2 e2) { // 处理 } finally { // 清理资源,...

Global site tag (gtag.js) - Google Analytics