更新時間: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…]{ }
從上述語法格式中可以看出,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課程詳情。