首頁新聞動態(tài)正文

Java異常之throws關(guān)鍵字用法介紹

更新時間:2019-10-07 來源:throws關(guān)鍵字用法介紹 瀏覽量:

我們試想一下,如果去調(diào)用一個別人寫的方法時,是否能知道別人寫的方法是否會有異常呢?這是很難做出判斷的。針對這種情況,Java中允許在方法的后面使用throws關(guān)鍵字對外聲明該方法有可能發(fā)生的異常,這樣調(diào)用者在調(diào)用方法時,就明確地知道該方法有異常,并且必須在程序中對異常進(jìn)行處理,否則編譯無法通過。

 

throws關(guān)鍵字聲明拋出異常的語法格式如下:

修飾符 返回值類型 方法名([參數(shù)1,參數(shù)2…])throws Exceptiontype1[,ExceptionType2…]{ }



1570431749588_java異常處理.jpg


 

從上述語法格式中可以看出,throws關(guān)鍵字需要寫在方法聲明的后面,throws后面需要聲明方法中發(fā)生異常的類型,通常將這種做法稱為方法聲明拋出一個異常。我們通過下面案例介紹。

例1:

 

public class Example1{
   public static void main(String [] args){
        int result=divide(4,2);     //調(diào)用 divide()方法
        System.out.println(result);  //下面的方法實現(xiàn)了兩個整數(shù)相除,并使用 throws關(guān)鍵字聲明拋出異常
   }
   public static int divide(int x ,int y) throws Exception{
        int result=x / y;  //定義一個變量 result記錄兩個數(shù)相除的結(jié)果
        return result;  //將結(jié)果返回
   }
}

 

運行結(jié)果:

D:\cn\itcast\chapter04>java Example1.java

Example1.java:3: 錯誤:未報告的異常錯誤Exception;必須對其進(jìn)行捕獲或者聲明以便拋出

int result divide(4, 2);//調(diào)用 divide()方法

1個錯誤


在上面案例1中第3行代碼調(diào)用divide()方法時傳入的第二個參數(shù)為2,程序在運行時不會發(fā)生被0除的異常,但是由于定義divide()方法時聲明拋出了異常,調(diào)用者在調(diào)用divide()方法時就必須進(jìn)行處理,否則就會發(fā)生編譯錯誤。下面案例1進(jìn)行修改,在調(diào)用divide()方法時對其進(jìn)行try…catch處理。例2:

 

public class Example2{
   public static void main(String [] args){
      try {
         int result= divide(4,2);    //調(diào)用 divide()方法
         System.out.println(result);
      } catch( Exception e) {   //對捕獲到的異常進(jìn)行處理
         e.printstackTrace(); //打印捕獲的異常信息
      }       
   }
   //下面的方法實現(xiàn)了兩個整數(shù)相除,并使用 throws關(guān)鍵字聲明拋出異常
   public static int divide (int x, int y) throws Exception {
      int result=x / y;   //定義一個變量resu1t記錄兩個數(shù)相除的結(jié)果
      return result;
   }
}

 

運行結(jié)果:

D:\cn\itcast\chapter04>java Example2

2


例2中,由于使用了try…catch對divide()方法進(jìn)行了異常處理,所以程序編譯通過,正確地打印出了運行結(jié)果2。

當(dāng)在調(diào)用 divide()方法時,如果不知道如何處理聲明拋出的異常,也可以使用throws關(guān)鍵字繼續(xù)將異常拋出,這樣程序也能編譯通過,但需要注意的是,程序一旦發(fā)生異常,如果沒有被處理,程序就會非正常終止。

例3:

public class Example3{
   public static void main(String[] args) throws Exception {
      int result= divide(4,0); //調(diào)用divide()方法
      System.out.println(result);
   }
   //下面的方法實現(xiàn)了兩個整數(shù)相除,并使用throws關(guān)鍵詞字聲明拋出異常
   public static int divide(int x,int y) throws Exception {
      int result=x /y;  //定義一個變量result記錄兩個數(shù)相除的結(jié)果
      return result;  //將結(jié)果返回
   }
}


運行結(jié)果

D:\cn\itcast\chapter04>java Example3

Exception in thread “main” java.lang.ArithmeticException:/  by zero

         at Example25.divide(Exaple3.java:8)

         at exmaple25.main(Examle3.java3)


例3中,在使用main(方法調(diào)用divide()方法時,并沒有對異常進(jìn)行處理而是繼續(xù)使用throws關(guān)鍵字將Exception拋出,從運行結(jié)果可以看出,程序雖然可以通過編譯,但在運行時由于沒有對“/by zero”的異常進(jìn)行處理,最終導(dǎo)致程序終止運行。

以上我們介紹了,java中throws關(guān)鍵字的用法,如果深入學(xué)習(xí)java知識,請點擊頁面咨詢按鈕了解黑馬程序員java課程詳情。

分享到:
在線咨詢 我要報名
和我們在線交談!