Java 錯誤結果Throw/Throws

來源:互聯網
上載者:User

標籤:參數   .com   public   blog   返回   name   導致   列表   span   

目錄

    java處理異常方式
    throw的作用
    throws的作用
    方法原理
    舉例
    總結

    個人執行個體

1.java處理異常方式

在java代碼中如果發生異常的話,jvm會拋出異常對象,導致程式碼中斷,這個時候jvm在做的操作就是:建立異常對象,然後拋出,比如:

int i= 1;  int j = 0;  int res = 0;  res = i/j;//除0錯誤  System.out.println(res);

 這5句代碼運行到第四句會中斷,因為jvm拋出了異常

2.throw的作用
手動拋出異常但是有時候有些錯誤在jvm看來不是錯誤,比如說
int age = 0;  age = -100;  System.out.println(age);

 很正常的整形變數賦值,但是在我們眼中看來就不正常,誰的年齡會是負的呢。所以我們需要自己手動引發異常,這就是throw的作用

int num1=10;
int num2=0;
int rest=num1/num2;    
if(num2=0){  
throw new ArithmeticException("年齡不能是負數!");//建立異常對象 ,拋出異常。ArithmeticException是除數為0出現異常
}  
System.out.println(age);
 3.throws的作用

聲明方法可能迴避的異常有異常被拋出了,就要做處理,所以java中有try-catch可是有時候一個方法中產生了異常,但是不知道該怎麼處理它,那麼就放著不管,當有異常拋出時會中斷該方法,而異常被拋到這個方法的調用者那裡。這個有點像下屬處理不了的問題就交到上司手裡一樣,這種情況稱為迴避異常但是這使得調用這個方法就有了危險,因為誰也不知道這個方法什麼時候會丟一個什麼樣的異常給調用者,所以在定義方法時,就需要在方法頭部分使用throws來聲明這個方法可能迴避的異常

void fun()throws IOException,SQLException  {  ...  }

 這表示 fun方法可能會丟兩個異常出來,那麼在調用fun的時候就會做好準備,比如可以這樣

    try      {      fun();      }catch(IOException e)      {      }catch(SQLException e)      {      }  

 

4.方法原理

系統自動拋出的異常

所有系統定義的編譯和運行異常都可以由系統自動拋出,稱為標準異常,並且 Java 強烈地要求應用程式進行完整的異常處理,給方便使用的提示,或者修正後使程式繼續執行。

語句拋出的異常  使用者程式自訂的異常和應用程式特定的異常,必須藉助於 throws 和 throw 語句來定義拋出異常。

throw是語句拋出一個異常。 文法:throw (異常對象);          throw e;

throws是方法可能拋出異常的聲明。(用在聲明方法時,表示該方法可能要拋出異常) 文法:[(修飾符)](傳回值類型)(方法名)([參數列表])[throws(異常類)]{......}             public void doA(int a) throws Exception1,Exception3{......}

5.舉例:

throws E1,E2,E3隻是告訴程式這個方法可能會拋出這些異常,方法的調用者可能要處理這些異常,而這些異常E1,E2,E3可能是該函數體產生的。 throw則是明確了這個地方要拋出這個異常。

void doA(int a) throws Exception1,Exception3{             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的話,那就是你把那個傾向變成真實的了。

6.總結

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

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

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

7.個人執行個體

 

Java 錯誤結果Throw/Throws

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.