今天遇到一个很奇葩的问题!在写Hadoop程序的时候!new一个对象!程序直接跑到finally代码块里面去了!Catch里面的Exception也没有执行。
Configuration configuration = new Configuration();
害我纳闷了好久!就去看了Hadoop的源码!new这个对象的时候也没执行哪些操作,只是一些正常的赋值而已!后来网上找了很久才发现,原来是被变成Throwable抛出来了!而Exception是Throwable的子类,所以无法捕捉到,只有捕捉Throwable的时候,才可以将错误信息打印!
具体原始是由于Hadoop的Configuration类中有个静态的变量,在ClassLoader加载class的时候,发生了异常
private static final Log LOG = LogFactory.getLog(Configuration.class);
我的错误很弱智,只是因为没有把 common-logging的包加进去而已! 相信一般情况这种事情很少人会遇到!但今天遇到了,就当是经验教训,也好让有这方面的疑问的人可以得到解决!所以呢,以后不要以为Catch(Exception e)就算是万事大吉了,throwable才是终极BOSS!
至于为什么这里抛出的是Throwable而不是Exception?我一直找都没找到原因! 希望哪位大牛能够告知一下!小弟在此谢过了!
时间: 2024-10-11 05:45:56