事務對於運行期異常回滾,對於編譯器不回滾的小例子

 @Override程序員

    public void test() {app

        

        // xml配置ide

        Vip vip = vipMapper.selectByPrimaryKey(31);函數

        vip.setRemark("55事物");xml

        vipMapper.updateByPrimaryKeySelective(vip);ip

        int a = 1;io

        if (a == 1) {編譯

            

            //int b=1/0;  //出現的 是運行期異常 會回滾的test

            

            

            try {監控

                int b=1/0;

            } catch (Exception e) {

                System.out.println("異常了");//捕獲了,並且沒有拋出異常 就是, 編譯期異常了,不會回滾的

                

                 throw new RuntimeException("hx_return is null");//拋出去 一個運行期異常纔會回滾的

            } 

 

 

         

            

        }

        

        

    }

 

 

   另外在代碼中,只在方法內throw而沒有在方法上聲明throws,也能夠編譯經過的話,就是運行時異常(RuntimeException

 

 

中文意思以下:

 

1.運行時異常和編譯時異常的區別 編譯時異常要求對它進行顯式的try..catch 捕獲處理或者向上一層方法拋出,不然在編譯期 間就顯示錯誤.而運行時異常在編譯階段不予檢查,語法上不會顯示任何錯誤。 2.throws和throw的相同點和區別 區別: 1)throw 是手動拋出異常,throw new **Exception(); 拋出的是某一個異常類型的實例 2)throws 是方法拋出異常,寫在方法聲明處 public void show()throws **Exception.緊跟throws後的是異常類型,而非異常實例,且能夠聲明拋出多個異常,同時這些異常類型大多都爲編譯時異常類型。  3)throw 是程序員手動拋出異常,通常可用在某種流程控制,須要顯示操做失誤狀況下可 對外拋出異常,進入catch代碼塊,明示操做有誤等. 明確這個地方要拋出這個異常. 4)throws 方法拋出異常,一般是告知調用此方法者,本方法有可能拋出一個異常,在調用 時應當要進行異常監控。且由於throws方法拋出異常爲編譯時異常類型,這樣在編譯階段就 要求用戶調用時對編譯時異常類型做出捕獲[try..catch(){}語句塊],或者再次向上拋出。 5)throws能夠單獨使用,但throw不能.throw要麼和try-catch-finally語句配套使用,要麼與throws配套使用。但throws能夠單獨使用,而後再由處理異常的方法捕獲。 6)程序會在throw語句後當即終止,它後面的語句執行不到,而後在包含它的全部try塊中 (可能在上層調用函數中)從裏向外尋找含有與其匹配的catch子句的try塊。 相同點: 只是拋出或者可能拋出異常,可是不會由函數去處理異常,真正的處理異常由函數的上層調 用處理。 3.如何對編譯時異常進行處理 方法一:將須要處理的代碼塊放在一個try...catch...中 方法二:在出現異常的方法上 直接向上拋出異常  [能夠一直繼續向上拋  直到主函數向上拋到JVM處理]

相關文章
相關標籤/搜索