java反射catch不到的异常

java反射catch不到的异常_第1张图片

先看上面一张图。我们在代码中t对有可能抛异常的地方会用try。。。catch包裹起来捕获异常再做处理,此前笔者就遇到一个头疼的问题,工具类代码中利用反射处理一些问题,也用try...catch捕捉可能出现的异常,代码在本地的eclipse中运行正常,但是到了测试环境就莫名其妙中断了,日志也是莫名其妙的就没打了,前面的日志都打了,然后页面上(页面调过来的)直接显示500错误。整个后台服务是起来的。没有日志没有捕获到异常,后面代码也没有执行,很奇怪,然后一顿操作各种jvm参数gc线程占用cpu时间等都去查看,因为怕是线程堵塞超时然后请求中断返回了,还有很多其他方面的分析,后面才在页面上返回的信息中找到了错误堆栈。提示一个反射方法找不到,原来是本地的jdk版本和测试环境的jdk版本不一致,本地的版本高些。一些反射相关的方法在测试环境的jdk中没有。好了,错误解决了,但是一个疑问是为什么没有捕捉到这个异常,后面看了这个图才意识到问题,我们一般catch()最大的异常都是Exception,如try{...}catch(Exception e){},但是可能抛出的问题不是个异常,是个Error。Error不属于Exception。那么我们可以把catch()这个里面改为最顶层,catch(Throwable e){},这样就进入异常情况下的处理代码了。笔者这次的异常是   nested exception is java.lang.NoSuchMethodError。

你可能感兴趣的:(java反射catch不到的异常)