1.代碼
public class ExcepTest { /** * @param args */ public static void main(String[] args) { System.err.println("111111111111"); // say(); //拋出異常,但是代碼不顯示的try..catch.. // calc(); //拋出異常,但是代碼不顯示的try..catch.. // try { // show(); // } catch (Exception e) { // e.printStackTrace(); // System.err.println("異常成功捕獲。。"); // } // try { // view(); // } catch (Exception e) { // e.printStackTrace(); // System.err.println("異常成功捕獲。。"); // } calc22(); System.err.println("222222222222"); } public static void say(){ //new NullPointerException System.err.println("say>>>>"); throw new NullPointerException(); } public static void calc() { //throws ArithmeticException ,這個異常不提示。 System.err.println("calc>>>>"); int i = 0, j = 0; System.err.println( i/j ); } public static void show() throws Exception{ //這個異常提示。 System.err.println("show>>>>"); int i = 0, j = 0; System.err.println( i/j ); } public static void view() throws Exception{ System.err.println("view>>>>"); throw new Exception(); } public static void calc22(){ System.err.println("calc22>>>>"); try { int i = 0, j = 0; int k = i/j ; } catch (Exception e) { System.err.println("異常處理完畢。。。。"); // throw e; //異常再度拋出。 // throw new ArithmeticException(); //繼承自exception的則是檢查型異常(當然,runtimeexception本身也是exception的子類 // throw new RuntimeException(); //(當然,runtimeexception本身也是exception的子類 //繼承自runtimeexception或error的是非檢查型異常 //ArithmeticException繼承RuntimeException } System.err.println("calc22>>>>calc22"); } }
2.說明
使用spring難免要用到spring的事務管理,要用事務管理又會很自然的選擇聲明式的事務管理,在spring的文檔中說道,spring聲明式事務管理默認對非檢查型異常和運行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。
那么什么是檢查型異常什么又是非檢查型異常呢?
最簡單的判斷點有兩個:
1.繼承自runtimeexception或error的是非檢查型異常,而繼承自exception的則是檢查型異常(當然,runtimeexception本身也是exception的子類)。
2.對非檢查型類異常可以不用捕獲,而檢查型異常則必須用try語句塊進行處理或者把異常交給上級方法處理總之就是必須寫代碼處理它。
引用:http://blog.csdn.net/yixiaoqingyuz/article/details/4485606