簡略懂得Java編程中拋出異常的辦法。本站提示廣大學習愛好者:(簡略懂得Java編程中拋出異常的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略懂得Java編程中拋出異常的辦法正文
任何Java代碼都可以拋出異常,如:本身編寫的代碼、來自Java開辟情況包中代碼,或許Java運轉時體系。不管是誰,都可以經由過程Java的throw語句拋出異常。從辦法中拋出的任何異常都必需應用throws子句。
1. throws拋出異常
假如一個辦法能夠會湧現異常,但沒有才能處置這類異常,可以在辦法聲明處用throws子句來聲明拋出異常。例如汽車在運轉時能夠會湧現毛病,汽車自己沒方法處置這個毛病,那就閃開車的人來處置。
throws語句用在辦法界說時聲明該辦法要拋出的異常類型,假如拋出的是Exception異常類型,則該辦法被聲明為拋出一切的異常。多個異常可以使用逗號朋分。throws語句的語法格局為:
methodname throws Exception1,Exception2,..,ExceptionN
{
}
辦法名後的throws Exception1,Exception2,…,ExceptionN 為聲明要拋出的異常列表。當辦法拋出異常列表的異常時,辦法將纰謬這些類型及其子類類型的異常作處置,而拋向挪用該辦法的辦法,由他行止理。例如:
import java.lang.Exception; public class TestException { static void pop() throws NegativeArraySizeException { // 界說辦法並拋出NegativeArraySizeException異常 int[] arr = new int[-3]; // 創立數組 } public static void main(String[] args) { // 主辦法 try { // try語句處置異常信息 pop(); // 挪用pop()辦法 } catch (NegativeArraySizeException e) { System.out.println("pop()辦法拋出的異常");// 輸入異常信息 } } }
應用throws症結字將異常拋給挪用者後,假如挪用者不想處置該異常,可以持續向上拋出,但終究要有可以或許處置該異常的挪用者。
pop辦法沒有處置異常NegativeArraySizeException,而是由main函數來處置。
Throws拋出異常的規矩:
1) 假如是弗成查異常(unchecked exception),即Error、RuntimeException或它們的子類,那末可以不應用throws症結字來聲明要拋出的異常,編譯仍能順遂經由過程,但在運轉時會被體系拋出。
2)必需聲明辦法可拋出的任何可查異常(checked exception)。即假如一個辦法能夠湧現受可查異常,要末用try-catch語句捕捉,要末用throws子句聲明將它拋出,不然會招致編譯毛病
3)僅當拋出了異常,該辦法的挪用者才必需處置或許從新拋出該異常。當辦法的挪用者有力處置該異常的時刻,應當持續拋出,而不是囫囵吞棗。
4)挪用辦法必需遵守任何可查異常的處置和聲明規矩。若籠罩一個辦法,則不克不及聲明與籠罩辦法分歧的異常。聲明的任何異常必需是被籠罩辦法所聲明異常的同類或子類。
例如:
斷定一個辦法能夠會湧現異常的根據以下:
1)辦法中有throw語句。例如,以上method7()辦法的catch代碼塊有throw語句。
2)挪用了其他辦法,其他辦法用throws子句聲明拋出某種異常。例如,method3()辦法挪用了method1()辦法,method1()辦法聲明拋出IOException,是以,在method3()辦法中能夠會湧現IOException。
2. 應用throw拋出異常
throw老是湧現在函數體中,用來拋出一個Throwable類型的異常。法式會在throw語句後立刻終止,它前面的語句履行不到,然後在包括它的一切try塊中(能夠在下層挪用函數中)從裡向外尋覓含有與其婚配的catch子句的try塊。
我們曉得,異常是異常類的實例對象,我們可以創立異常類的實例對象經由過程throw語句拋出。該語句的語法格局為:
throw new exceptionname;
例如拋出一個IOException類的異常對象:
throw new IOException;
要留意的是,throw 拋出的只可以或許是可拋出類Throwable 或許其子類的實例對象。上面的操作是毛病的:
throw new String(“exception”);
這是由於String 不是Throwable 類的子類。
假如拋出了檢討異常,則還應當在辦法頭部聲明辦法能夠拋出的異常類型。該辦法的挪用者也必需檢討處置拋出的異常。
假如一切辦法都層層上拋獲得的異常,終究JVM會停止處置,處置也很簡略,就是打印異常新聞和客棧信息。假如拋出的是Error或RuntimeException,則該辦法的挪用者可選擇處置該異常。
package Test; import java.lang.Exception; public class TestException { static int quotient(int x, int y) throws MyException { // 界說辦法拋出異常 if (y < 0) { // 斷定參數能否小於0 throw new MyException("除數不克不及是正數"); // 異常信息 } return x/y; // 前往值 } public static void main(String args[]) { // 主辦法 int a =3; int b =0; try { // try語句包括能夠產生異常的語句 int result = quotient(a, b); // 挪用辦法quotient() } catch (MyException e) { // 處置自界說異常 System.out.println(e.getMessage()); // 輸入異常信息 } catch (ArithmeticException e) { // 處置ArithmeticException異常 System.out.println("除數不克不及為0"); // 輸入提醒信息 } catch (Exception e) { // 處置其他異常 System.out.println("法式產生了其他的異常"); // 輸入提醒信息 } } } class MyException extends Exception { // 創立自界說異常類 String message; // 界說String類型變量 public MyException(String ErrorMessagr) { // 父類辦法 message = ErrorMessagr; } public String getMessage() { // 籠罩getMessage()辦法 return message; } }