更新時(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…]{ }
從上述語(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課程詳情。