天天看點

Java中throws和throw的差別講解

直接進入正題哈:

1.使用者程式自定義的異常和應用程式特定的異常,必須借助于 throws 和 throw 語句來定義抛出異常。

1.1   throw是語句抛出一個異常。

文法:throw (異常對象);

         throw e;

1.2   throws是方法可能抛出異常的聲明。(用在聲明方法時,表示該方法可能要抛出異常)

文法:[(修飾符)](傳回值類型)(方法名)([參數清單])[throws(異常類)]{......}

            public void doa(int a) throws exception1,exception3{......}

舉例:

throws e1,e2,e3隻是告訴程式這個方法可能會抛出這些異常,方法的調用者可能要處理這些異常,而這些異常e1,e2,e3可能是該函數體産生的。

throw則是明确了這個地方要抛出這個異常。

如: void doa(int a) throws ioexception,{

           try{

                 ......

           }catch(exception1 e){

              throw e;

           }catch(exception2 e){

              system.out.println("出錯了!");

           }

           if(a!=b)

              throw new  exception3("自定義異常");

}

代碼塊中可能會産生3個異常,(exception1,exception2,exception3)。

如果産生exception1異常,則捕獲之後再抛出,由該方法的調用者去處理。

如果産生exception2異常,則該方法自己處理了(即system.out.println("出錯了!");)。是以該方法就不會再向外抛出exception2異常了,void doa() throws exception1,exception3 裡面的exception2也就不用寫了。

而exception3異常是該方法的某段邏輯出錯,程式員自己做了處理,在該段邏輯錯誤的情況下抛出異常exception3,則該方法的調用者也要處理此異常。

throw語句用在方法體内,表示抛出異常,由方法體内的語句處理。

throws語句用在方法聲明後面,表示再抛出異常,由該方法的調用者來處理。

throws主要是聲明這個方法會抛出這種類型的異常,使它的調用者知道要捕獲這個異常。

throw是具體向外抛異常的動作,是以它是抛出一個異常執行個體。

throws說明你有那個可能,傾向。

throw的話,那就是你把那個傾向變成真實的了。

同時:

1、throws出現在方法函數頭;而throw出現在函數體。

2、throws表示出現異常的一種可能性,并不一定會發生這些異常;throw則是抛出了異常,執行throw則一定抛出了某種異常。

3、兩者都是消極處理異常的方式(這裡的消極并不是說這種方式不好),隻是抛出或者可能抛出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。

轉載:http://blog.csdn.net/chaoyu168/article/details/48827303