`

关于try-catch的finally

阅读更多
知识点一:在Java的方法中,throw这个关键字只能throw throwable的子类。

知识点二:try-catch代码块在执行完之前,会先执行一下finally中的代码。

知识点三:假如在try中return 一个返回值,在finally里面又return了一个返回值,finally中的return会覆盖掉try中的return.
    public static int testC() {
        int i =1;
        try {
            return i;
        }  finally {
            return 2;
        }
    }
    public static void main( String[] args )
    {
    	System.out.println(testC());
    }

执行结果: 2
分析:try中的返回值被finally中的return给覆盖了,也就是丢失了逻辑。实际这是一个不合理的设计,finally中应该要做的只是在try中完成操作后,只进行必要的清理,不应该在finally中出现影响影响代码逻辑的代码。

知识点四:假如在try中return了一个i值,在finally中又对i进行了重新赋值。那么try中的return不受影响。
    public static int testC() {
        int i =1;
        try {
            return i;
        }  finally {
            i = 2;
        }
    }
    public static void main( String[] args )
    {
    	System.out.println(testC());
    }

执行结果:1
分析: 实际在finally中对i的重新赋值,并没有影响到return的返回。
查看机器码
 public static int testC();
   Code:
      0: iconst_1
      1: istore_0
      2: iload_0
      3: istore_2
      4: iconst_2
      5: istore_0
      6: iload_2
      7: ireturn
      8: astore_1
      9: iconst_2
     10: istore_0
     11: aload_1
     12: athrow
   Exception table:
      from    to  target type
          2     4     8   any

可以看到0-1,先把i放入第0个本地变量,到达return语句时,会将i从0个本地变量取出放入第二个本地变量,即保存现场,然后在finally中做的对i赋值的操作后,在将现场从第二个本地变量取出。所以返回值还是1
分享到:
评论

相关推荐

    try-catch-finally捕获异常

    try-catch-finally捕获异常 try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的...

    使用try-catch-finally处理异常

    你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理更加灵活,能够针对不同层次的异常进行分别处理。 6. **throw和throws关键字** `throw`...

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

    标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...

    try-catch-finally(处理方案示例).md

    try-catch-finally结构是许多编程语言提供的一种异常处理方式。本文通过JavaScript语言提供的try-catch-finally语句的示例,展现了如何处理可能出现的异常情况,并确保代码的健壮性。 首先,try块用于包裹可能会抛...

    java.try-catch-finally(解决方案).md

    try-catch-finally结构是Java中处理异常的基础,其基本用法包括:try块用于包裹可能出现异常的代码,catch块用于捕获并处理特定类型的异常,而finally块则用于执行无论是否发生异常都需要执行的代码,例如资源清理和...

    java.try-catch-finally(处理方案示例).md

    `try-catch-finally`是Java中用来处理异常的常用结构,这一结构包括三个主要部分:`try`块、`catch`块和`finally`块。 `try`块是异常处理的开始,它包含可能抛出异常的代码。程序执行到这个块里的代码时,如果发生...

    try_catch_finally异常处理java

    本文将深入探讨Java中的`try-catch-finally`语句块,以及它们在异常处理中的作用。 首先,`try`块是异常处理的起点。在这个代码段中,我们通常会放置可能会抛出异常的代码。当Java执行到可能抛出异常的代码行时,...

    java.try-catch-finally.md

    Java中的`try-catch-finally`结构是处理异常的标准方式。这个结构允许程序员在程序执行过程中对可能出现的异常进行捕获和处理,并确保程序在发生异常时能够稳定地执行必要的清理工作。在介绍的知识点中,我们看到了...

    异常+异常处理+try-catch-finally+教程

    异常+异常处理+try-catch-finally+教程 - 本资源是一个异常处理的教程,教你如何用Java的try-catch-finally语句处理异常,包括抛出和捕获异常,自定义异常,多个异常,finally块等。

    try-catch的用法和含义

    ### try-catch 的用法与含义详解 在编程过程中,异常处理是确保程序稳定性和健壮性的关键环节之一。`try-catch` 结构作为异常处理的核心机制,在各种编程语言中广泛采用,如 Java、C# 和 JavaScript 等。本文将深入...

    C#异常处理终极指南:try-catch-finally的深度实践.pdf

    在C#中,异常处理是通过try-catch-finally结构实现的,这一结构使得程序能够对潜在的错误进行捕获和处理,以及执行必要的清理工作。 异常是程序运行时出现的一种错误状态,可以由多种情况引起,如文件读写错误、...

    C#异常处理避坑指南:try-catch-finally的5个黄金法则.pdf

    C#异常处理避坑指南:try-catch-finally的5个黄金法则 一、引言 在C#编程中,异常处理是保证程序健壮性和稳定性的关键环节。try-catch-finally语句是C#中处理异常的核心结构,然而,许多开发者在使用过程中容易陷入...

    Java 异常处理:`try-catch-finally` 与自定义异常全解析

    Java 异常处理:`try-catch-finally` 与自定义异常全解析

    try-catch用法

    3. **资源清理**:如果 `try` 块中使用了需要关闭的资源(如文件流),应使用 `finally` 块确保资源得到正确的释放。 4. **异常重新抛出**:在某些情况下,可能需要在捕获异常后进行一些处理,然后再重新抛出异常。...

    C#异常处理进阶:try-catch-finally的5层防御体系构建.pdf

    本文将深入探讨C#中的异常处理进阶知识,特别是如何构建一个包含5层防御体系的try-catch-finally结构。 首先,异常处理在C#编程中是确保程序稳定性和健壮性的关键环节。try-catch-finally结构是异常处理的核心机制...

    try-catch-finally.js:一个很小的库,用于在JavaScript中更灵活地捕获错误

    try-catch-finally.js 843字节库,可在JavaScript中更灵活地捕获错误。内容注意事项按名称捕获可能不起作用按类型捕获在跨框架/过程中不起作用错误被消耗测验 安装 浏览器< script src =" try-catch-finally.js ...

    try 与 catch finally关键字

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

    java.try-except-finally.md

    Java中的try-catch-finally结构是用于异常处理的重要语法,它可以显著提升程序的健壮性。在编程过程中,常常会遇到意料之外的情况,这些情况可能会导致程序崩溃,例如除数为零的情形。为了解决这类问题,Java提供了...

    try-catch-finally的说明和使用

    学习Java异常必要了解try_catch_finally的说明和使用讲解注意事项

Global site tag (gtag.js) - Google Analytics