为了在发生异常时候Spring事务能回滚,在捕获异常后抛出new RuntimeException,在最终记录调用结果的方法中捕获Exception,记录下异常信息,今天发现在catch中使用e.getMessage()拿不到异常信息,如下所示:
简单的写个例子,用到了反射:
package exception; public class ExceptionMsgClass { public int methodTest(String orgIdStr) throws Exception { try { if (orgIdStr == null || Integer.parseInt(orgIdStr) < 0) { throw new Exception("非法参数"); } int orgId = Integer.parseInt(orgIdStr); if (orgId < 100) { throw new Exception("参数数量不正确"); } return orgId; } catch (Exception e) { System.out.println("准备抛出异常信息:" + e.getMessage()); throw new RuntimeException(e.getMessage()); } } }
调用测试:
package exception; import java.lang.reflect.Method; public class ExceptionReflectTest { public void reflectTest(String className,String value){ try{ Class c=Class.forName(className); Object object = c.newInstance(); Method mth = object.getClass().getMethod("methodTest",String.class); Integer result=(Integer) mth.invoke(object, value); System.out.println(result); }catch(Exception e){ String msg=e.getMessage(); System.out.println("捕获异常信息:"+msg); } } public static void main(String[] args) { ExceptionReflectTest t=new ExceptionReflectTest(); t.reflectTest("exception.ExceptionMsgClass", "13"); } }
结果为:
准备抛出异常信息:参数数量不正确 捕获异常信息:null
debug结果为:
正确方法为:
package exception; import java.lang.reflect.Method; public class ExceptionReflectTest { public void reflectTest(String className,String value){ try{ Class c=Class.forName(className); Object object = c.newInstance(); Method mth = object.getClass().getMethod("methodTest",String.class); Integer result=(Integer) mth.invoke(object, value); System.out.println(result); }catch(Exception e){ String msg=e.getMessage(); if(e.getCause() instanceof RuntimeException){ msg=e.getCause().getMessage(); } System.out.println("捕获异常信息:"+msg); } } public static void main(String[] args) { ExceptionReflectTest t=new ExceptionReflectTest(); t.reflectTest("exception.ExceptionMsgClass", "13"); } }
结果为:
转载请注明原处,http://53873039oycg.iteye.com/blog/2104488 ,谢谢。
全文完。
相关推荐
### Oracle 存储过程 Exception 异常处理详解 #### 1. 异常处理概念 在 Oracle 存储过程中,异常处理是一项非常重要的技术,它能够帮助开发人员编写更加健壮和可维护的代码。异常处理允许程序在遇到错误或其他意外...
- 尽量减少在`catch`块中只是简单地打印错误信息,而应提供有用的错误处理策略,如记录日志、重新抛出异常或提供备用方案。 - 使用多个`catch`块分别处理不同类型的异常,提高代码的可读性和可维护性。 - 在`...
3. **异常信息要清晰**:确保异常消息足够详细,以便于调试和定位问题。 4. **不要忽视异常**:即使是在测试环境中,也应该妥善处理异常,避免因为忽视异常而导致的问题积累。 综上所述,Java异常处理机制为...
其次,定位问题时需要深入到代码层面,查找与异常信息相关的代码部分,并对照异常信息确定出问题的具体代码行。对于复杂的项目,可以利用集成开发环境(IDE)提供的异常查看和调试工具,快速定位到问题所在。另外,...
示例中简单地输出了异常信息,但在实际情况中,可能需要根据异常的类型和上下文执行更复杂的错误处理逻辑。 处理异常时,有一些最佳实践需要遵循。首先,不应该忽略异常,即便在开发和测试阶段。因为异常是程序运行...
通过这种方式,当应用程序的任何线程抛出未捕获的异常时,我们的`CustomExceptionHandler`将会捕获它,执行我们自定义的异常处理逻辑,如在上述示例中将异常信息保存到SDCard。 此外,除了捕获全局异常,开发者还...
异常日志中通常包含有关错误发生时的详细信息,这可以帮助开发者快速定位问题。因此,在代码中加入日志记录是一个很好的调试习惯,它可以在问题发生时提供关键线索。开发者可以利用HarmonyOS的日志系统,在关键代码...
至少记录异常信息,以便于调试。 3. **使用`finally`释放资源**:在`finally`块中释放非内存资源,确保资源始终得到正确清理。 4. **自定义异常**:当系统中存在特定的错误情况时,可以创建自定义异常类,使异常更...
当尝试除以0时,`catch`块内的代码将被执行,输出异常信息。 其次,我们讨论无效对象异常(NullReferenceException)。这是C#中最常见的异常之一,通常发生在试图访问或操作null引用的对象时。预防这种异常的最佳...
通过自定义`Thread.UncaughtExceptionHandler`,我们可以确保所有未被捕获的异常都能得到妥善处理,并且将异常信息存储到外部存储中,便于后期分析和调试。这对于大型应用或复杂业务逻辑来说尤其关键,因为它能够...
最后,文档提醒开发者在处理异常时要了解异常的详细信息和背景,向用户提供有用的反馈,尽量修复问题的根源,而不是简单地捕获异常并忽略它。并且,在将解决方案部署到生产环境之前,应当进行充分的测试。 解决手势...
异常信息通常包含了很多有用的线索,可以帮助我们理解问题所在。例如,异常的堆栈跟踪信息通常会包含关于问题的详细描述以及可能的解决方案。因此,我们需要仔细查看这些信息。 其次,我们需要检查图像输入。有时候...
在实际应用中遇到问题时,应当结合具体的异常信息和上下文环境进行调试和分析,并采取相应的措施来解决问题。在处理完异常后,还应当记录必要的日志,并增加监控手段来跟踪和分析问题,以便于后续的排查和修复工作。...
- 避免在catch块中简单地忽略异常,至少应该记录异常信息。 - 避免在catch块中抛出一个未包含原始异常的新异常,这种做法称为“吞没异常”。 掌握Java异常处理的原理和最佳实践,能够让开发者编写出更加稳定和易于...
如果能提供异常的详细信息或相关代码,将有助于获得更精确的解决方案。 面对`MotionDetectionException`这一类异常时,开发者需要从多个维度进行思考和操作,从而有效地定位问题并找到解决问题的合适方法。在此过程...
在处理异常的逻辑中,程序会打印出异常信息帮助调试,并可以添加更多的错误处理逻辑,比如重新尝试操作、记录日志等。如果问题很严重,甚至可能需要重置硬件或重启程序。 需要注意的是,代码示例仅提供了一个基本的...
最后,如果还有其他未处理的异常,`Exception`块将捕获它们并打印出相应的错误信息。 除了基本的异常处理,还可以使用`try/except/finally`结构来确保即使在异常发生后,某些清理或资源释放操作仍能得到执行。例如...
在实际项目中,我们通常会结合使用CrashReport工具(如Crashlytics、Fabric、Bugly等)来收集和分析异常信息,以便更好地定位问题和优化代码。这些工具可以帮助开发者获取到详细的堆栈跟踪,包括设备信息、系统版本...
以示例中的testTryCatch()方法为例,该方法模拟了简单的除法操作,故意在除数为零的情况下抛出ArithmeticException异常。字节码中通过" Exceptiontable" 显示了异常处理信息,它包含四个列:从、到、目标和类型。这...