【问题标题】:what happen to the exceptions when try used the finally only instead of catch and how it handles? [duplicate]当 try 只使用 finally 而不是 catch 时,异常会发生什么以及它如何处理? [复制]
【发布时间】:2014-11-21 03:55:54
【问题描述】:

当程序员使用不带catch的try块时

喜欢这个

    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        pm.makePersistent(c);
    } finally {
        pm.close();
    }

异常会发生什么以及以后如何处理?

我尝试从互联网上学习它,但没有明确的结果......

【问题讨论】:

标签: java exception-handling


【解决方案1】:

当您不指定catch 块时,您基本上将处理异常的责任转移给了方法的调用者。

因此,如果您的方法没有从 try 块中捕获一个或多个异常,并且在您的方法块中引发异常,它将被抛出回调用者。

finally 块可确保如果 try 块中发生不良情况,那么至少您将有机会在异常被抛出回调用者之前关闭/释放任何相关资源。

【讨论】:

    【解决方案2】:

    是的。这说得通。在您的情况下,甚至出现异常,程序员只想忽略抛出的异常并关闭PersistenceManager。在这个级别上,异常被忽略了,在顶层,有人可能会抓住它。它委托给那里。

    【讨论】:

      【解决方案3】:

      catch 语句用于根据您的需要捕获特定的异常。即使您可以在 catch 中使用一般异常来捕获异常。如果你使用没有 catch 异常将被默认处理。

      【讨论】:

        【解决方案4】:

        此时异常未得到处理,仍会冒泡。以后得处理了

        【讨论】:

          【解决方案5】:

          这是在分配资源的代码中处理(或更好:不处理)异常的常用习惯。

          如果 try 块中发生异常,则该块将突然结束。然后会查找对应的catch语句。如果找不到,那么外部块将突然结束,这在大多数情况下意味着该方法将向其调用者抛出此异常。

          但在此之前,finally 块总是会在离开 try 块之后执行(甚至在处理捕获的异常之后)。这是处置任何已分配资源的最佳场所。这样,无论是否发生异常,您都可以确保在工作后进行清理。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-18
            • 2010-10-24
            • 2019-01-07
            相关资源
            最近更新 更多