为了在发生异常时候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异常处理机制为...
通过这种方式,当应用程序的任何线程抛出未捕获的异常时,我们的`CustomExceptionHandler`将会捕获它,执行我们自定义的异常处理逻辑,如在上述示例中将异常信息保存到SDCard。 此外,除了捕获全局异常,开发者还...
至少记录异常信息,以便于调试。 3. **使用`finally`释放资源**:在`finally`块中释放非内存资源,确保资源始终得到正确清理。 4. **自定义异常**:当系统中存在特定的错误情况时,可以创建自定义异常类,使异常更...
当尝试除以0时,`catch`块内的代码将被执行,输出异常信息。 其次,我们讨论无效对象异常(NullReferenceException)。这是C#中最常见的异常之一,通常发生在试图访问或操作null引用的对象时。预防这种异常的最佳...
通过自定义`Thread.UncaughtExceptionHandler`,我们可以确保所有未被捕获的异常都能得到妥善处理,并且将异常信息存储到外部存储中,便于后期分析和调试。这对于大型应用或复杂业务逻辑来说尤其关键,因为它能够...
最后,如果还有其他未处理的异常,`Exception`块将捕获它们并打印出相应的错误信息。 除了基本的异常处理,还可以使用`try/except/finally`结构来确保即使在异常发生后,某些清理或资源释放操作仍能得到执行。例如...
在实际项目中,我们通常会结合使用CrashReport工具(如Crashlytics、Fabric、Bugly等)来收集和分析异常信息,以便更好地定位问题和优化代码。这些工具可以帮助开发者获取到详细的堆栈跟踪,包括设备信息、系统版本...
- 可以重写`toString()`方法来提供更详细的异常信息。 - 使用`initCause(Throwable cause)`方法指定异常的原始原因。 2. **自定义异常的作用** - 提高程序的可读性和维护性。 - 为业务逻辑提供更具体的错误信息...
ASP.NET 是一个强大的Web应用程序框架,由微软开发,用于构建高效、安全的Web应用。...通过这些步骤,我们不仅可以确保在出错时得到详细的信息,还能提升问题解决的速度,从而增强系统的稳定性和用户体验。
2. **错误封装**:将错误的具体原因和性质封装到一个异常对象中,该对象可以是简单的整数值也可以是复杂的C++类对象。 3. **异常的检测**:通过轮询或主动上报的方式检测异常的存在。 4. **异常的处理**:根据具体...
7. **调试与日志(Debugging and Logging)**:在易语言源码中,为了便于调试和问题排查,通常会包含一些用于记录异常信息和程序状态的日志功能。 通过对"易语言源码易语言向量化异常处理.rar"这个压缩包文件的分析...
易语言的SEH源码可能展示了如何处理这种复杂情况,确保每个级别的异常都能得到适当的处理。 6. **源码分析**:深入研究这个源码,我们可以学习到如何在易语言中注册SEH处理程序,如何设置和调用异常过滤器,以及...
例如,下面的代码演示了如何创建一个简单的自定义异常: ```java package Exception; class SimpleException extends Exception{} public class InheritingException{ public void f() throws SimpleException { ...
- **正确处理异常**:根据具体的异常类型采取相应的处理措施,如记录日志、重试操作或返回错误信息等。 - **使用finally块释放资源**:对于打开的文件或网络连接等资源,在`finally`块中进行释放,确保资源得到正确...
然后,我们在catch块中捕获这个异常,并打印出异常信息。最后,finally块中的代码确保总能得到执行,即使有异常发生。 了解并熟练掌握Java异常处理不仅能够帮助我们编写更健壮的代码,还能提高程序的可维护性和用户...