`
wangxiangjunpxp
  • 浏览: 37329 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

小心finally块里面的异常

阅读更多

try {
   emf = Persistence.createEntityManagerFactory(Constants.getProperty("persistenceUnit","synch"));
   
   em = emf.createEntityManager();
   emForReverse =  emf.createEntityManager();
   emForHis = emf.createEntityManager();
   if (em == null || emForReverse == null || emForHis == null){
    //logger.info("不能获得实体管理器,无法初始化数据库模块!");
    throw new Exception("获得实体管理器为空!");
   }
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   //e.printStackTrace();
   throw new Exception("获取数据库功能模块失败!" + e);
  }finally{
         emf.close();  /////问题在于这里可能抛出异常,导致上面我故意抛出的异常不被看到。
  }

 

这是在一个servlet的init函数里面调用的代码,如果在finally模块里面不抓异常,则因为finally代码块是在函数返回之前执行,finally里面可能发生的空指针异常会先抛出,而我需要看到的业务逻辑方面的异常却被屏蔽。造成极大困惑!

 

分享到:
评论

相关推荐

    try-catch-finally捕获异常

    finally块总是会被执行,無論try块中是否出现异常。finally块的语法结构如下: ```java finally { // 资源释放或清理操作 } ``` 四、异常处理机制 try-catch-finally语句的异常处理机制可以分为以下几个步骤: ...

    使用try-catch-finally处理异常

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

    try_catch_finally异常处理java

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

    dotnet C# 在 finally 抛异常会发生什么.rar

    `try`块包含可能会引发异常的代码,`catch`块用于捕获和处理这些异常,而`finally`块则确保无论是否发生异常,都会执行特定的清理代码,如关闭文件流或释放资源。`finally`块的设计目的是保证代码的整洁性和资源的...

    finally结构的注意点(一)

    在编程语言中,`finally` 结构是一种保证代码执行的关键构造,无论程序的其他部分是否抛出异常或者正常结束,`finally` 块中的代码总是会被执行。这对于清理资源,比如关闭文件流或者数据库连接,是至关重要的。在...

    java try…catch…finally捕获异常的实例

    `finally`块包含在`try-catch`结构中,无论是否发生异常,`finally`块中的代码都会被执行。这通常用于清理资源,如关闭文件流、网络连接等。 ```java finally { // 清理代码,确保无论是否发生异常都会执行 } ``` ...

    java 中finally语句块与return的执行关系

    因此,在编写 Java 代码时,需要非常小心地处理 finally 语句块与 return 的执行关系,以免出现意外的结果。 在 Java 中,还有一些其他的存储区域,例如寄存器、堆栈、静态存储区等。这些存储区域都有其特点和作用...

    在静态编译器中实现Java异常机制的算法.pdf

    Java 异常处理逻辑可以分为六种情况:try 块不抛出异常且不包含 finally 块、try 块不抛出异常且包含 finally 块、try 块抛出异常且 catch 块不处理异常且不包含 finally 块、try 块抛出异常且 catch 块不处理异常且...

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

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

    c/vc++/MFC异常处理/结构化异常处理 浅析

    SEH使用__try、__except和__finally关键字,能够捕获和处理系统级异常,如硬件故障、访问违规等。相比于C++异常,SEH更加底层,性能更好,但在代码的可读性和可移植性上略逊一筹。在MFC中,可以通过CATCH_ALL、END_...

    C#异常处理总结及简单实例

    C#异常处理总结及简单实例 一、异常处理的理解? 异常处理是指程序在运行过程中,发生...3、finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。 例如如果你打开一个文件,不管是否出现异常文件都

    Java异常处理之try...catch...finally详解

    Try块中可以包含多个语句,catch块中可以包含多个异常类型,finally块中可以包含资源的释放代码。通过try…catch…finally语句块,我们可以轻松地处理各种异常,确保程序的健壮性和可靠性。 Java异常处理机制的优点...

    方法抛出的异常处理 (2)修改UserDaoImp1类,要求用户id不能修改,修改则抛出异常 使用log4j输出日志信息

    1.需要完成的任务 使用UserDaoImp1类和User...(2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息

    Python自学教程-18-异常的finally.ev4.rar

    本教程将深入探讨Python中的异常处理机制,特别是`try/except/finally`块的应用。异常是程序运行过程中出现的错误,可能由语法错误、逻辑错误或外部条件(如文件未找到)引起。Python提供了一种优雅的方式来捕获并...

    Java finally语句到底是在return之前还是之后执行?

    在Java编程语言中,`finally`语句块是一个非常关键的结构,用于确保特定代码无论在任何情况下(包括异常发生或正常返回)都会被执行。这个特性使得`finally`成为处理资源清理,如关闭文件流、数据库连接等操作的理想...

    异常处理.pdf

    此外,finally块虽然总是被执行,但如果在finally块内部发生异常,则可能导致原本的异常信息被覆盖。 7. 自定义异常:Java允许开发者定义自己的异常类。自定义异常类继承自Exception类或其子类,以表示程序中可能...

    finally块3---马克-to-win java视频

    finally块3---马克-to-win java视频的详细的描述与介绍

    finally块1---马克-to-win java视频

    finally块1---马克-to-win java视频的详细的介绍与描述

    finally块2---马克-to-win java视频

    finally块2---马克-to-win java视频的详细的描述与介绍

    Java异常处理细节分析

    3. **Finally块**:无论`try`块是否发生异常,或者异常是否被`catch`块捕获,都会执行`finally`块。这个特性使得`finally`块非常适合用于释放资源等操作。 ##### 2.2 执行结果分析 根据不同的执行情况,我们可以将...

Global site tag (gtag.js) - Google Analytics