本文目錄一覽:
- 1、JAVA如何拋出異常
- 2、java拋出異常
- 3、拋出異常指令
JAVA如何拋出異常
從他處拷貝的,也許對你有用。其實,Java書上都應該有這一章節,認真看應該不會太難入門。
如果你知道你寫的某個函數有可能拋出異常,而你又不想在這個函數中對異常進行處理,只是想把它拋出去讓調用這個函數的上級調用函數進行處理,那麼有兩種方式可供選擇:
第一種方式:直接在函數頭中throws SomeException,函數體中不需要try/catch。比如將最開始的例子中的testEx2改為下面的方式,那麼testEx1就能捕捉到testEx2拋出的異常了。
boolean testEx2() throws Exception{
boolean ret = true;
int b=12;
int c;
for (int i=2;i=-2;i–){
c=b/i;
System.out.println(“i=”+i);
}
return true;
}
第二種方式:使用try/catch,在catch中進行一定的處理之後(如果有必要的話)拋出某種異常。例如上面的testEx2改為下面的方式,testEx1也能捕獲到它拋出的異常:
boolean testEx2() throws Exception{
boolean ret = true;
try{
int b=12;
int c;
for (int i=2;i=-2;i–){
c=b/i;
System.out.println(“i=”+i);
}
return true;
}catch (Exception e){
System.out.println(“testEx2, catch exception”);
Throw e;
}
}
第三種方法:使用try/catch/finally,在catch中進行一定的處理之後(如果有必要的話)拋出某種異常。例如上面的testEx2改為下面的方式,testEx1也能捕獲到它拋出的異常:
boolean testEx2() throws Exception{
boolean ret = true;
try{
int b=12;
int c;
for (int i=2;i=-2;i–){
c=b/i;
System.out.println(“i=”+i);
throw new Exception(“aaa”);
}
return true;
}catch (java.lang.ArithmeticException e){
System.out.println(“testEx2, catch exception”);
ret = false;
throw new Exception(“aaa”);
}finally{
System.out.println(“testEx2, finally; return value=”+ret);
}
}
java拋出異常
拋出異常分為兩種吧,一種是製造異常,一種是拋出可能發生的異常
throw關鍵字,拋出一個異常(即製造一個異常),用法 throw 異常 ,該異常必須為java.lang.Exception的子類,如果是RuntimeException子類的話,則不需要捕獲或拋出異常。
throws關鍵字,拋出一個可能發生的異常,用在函數定義中,末尾處,以主函數為例子,public static void main(String[] args) throws 異常; 該異常必須為Exception子類,常用於其子類,是這一個方法體執行中可能拋出(throw)的異常處理。如果不進行throws,也可以用try…catch語句進行捕獲。
自定義異常,類一定(間接)繼承java.lang.Exception類,當然,繼承java.lang.RuntimeException就可以不用進行處理,下面舉一個例子:
public class TestException extends Exception {
public TestException(String message) {
super(message);
}
public TestException() {}
}
一般自定義異常需要有2個構造函數,五參構造器和String類型構造器,有參構造調用父類有參構造。
拋出異常指令
在Java程序中顯示拋出異常的操作(throw語句)都是由athrow指令來實現的。
除了使用throw語句顯示拋出異常情況之外, JVM規範還規定了許多運行時異常會在其他Java虛擬機指令檢測到異常狀況時自動拋出。 例如,在之前介紹的整數運算時,當除數為零時,虛擬機會在idiv或ldiv指令中拋出ArithmeticException異常。
正常情況下,操作數棧的壓入彈出都是一條條指令完成的。唯一的例外情況是在 在拋異常時,Java虛擬機會清除操作數棧上的所有內容,而後將異常實例壓入調用者操作數棧上。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158955.html