今天遇到一個很奇葩的問題!在寫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?我一直找都沒找到原因! 希望哪位大牛能夠告知一下!小弟在此謝過了!