首頁(yè)新聞動(dòng)態(tài)正文

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

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

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

 

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

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



1570431749588_java異常處理.jpg


 

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

例1:

 

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

 

運(yùn)行結(jié)果:

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

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

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

1個(gè)錯(cuò)誤


在上面案例1中第3行代碼調(diào)用divide()方法時(shí)傳入的第二個(gè)參數(shù)為2,程序在運(yùn)行時(shí)不會(huì)發(fā)生被0除的異常,但是由于定義divide()方法時(shí)聲明拋出了異常,調(diào)用者在調(diào)用divide()方法時(shí)就必須進(jìn)行處理,否則就會(huì)發(fā)生編譯錯(cuò)誤。下面案例1進(jìn)行修改,在調(diào)用divide()方法時(shí)對(duì)其進(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) {   //對(duì)捕獲到的異常進(jìn)行處理
         e.printstackTrace(); //打印捕獲的異常信息
      }       
   }
   //下面的方法實(shí)現(xiàn)了兩個(gè)整數(shù)相除,并使用 throws關(guān)鍵字聲明拋出異常
   public static int divide (int x, int y) throws Exception {
      int result=x / y;   //定義一個(gè)變量resu1t記錄兩個(gè)數(shù)相除的結(jié)果
      return result;
   }
}

 

運(yùn)行結(jié)果:

D:\cn\itcast\chapter04>java Example2

2


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

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

例3:

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


運(yùn)行結(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()方法時(shí),并沒有對(duì)異常進(jìn)行處理而是繼續(xù)使用throws關(guān)鍵字將Exception拋出,從運(yùn)行結(jié)果可以看出,程序雖然可以通過編譯,但在運(yùn)行時(shí)由于沒有對(duì)“/by zero”的異常進(jìn)行處理,最終導(dǎo)致程序終止運(yùn)行。

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

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!