1.系統自動拋出的異常
系統定義的編譯和運行異常都可以由系統自動拋出,稱爲<strong>標準異常。
2.語句拋出的異常
用戶程序自定義的異常和應用程序特定的異常,必須藉助 throws 和 throw 拋出。throw拋出一個異常。需要自己捕獲,並進行相應處理。
語法:throws是聲明方法中可能拋出的所有異常(在聲明方法處表示該方法可能要拋出異常),通常不顯示的捕獲異常,由系統自動將所有捕獲的異常拋給上級方法;
語法:public void doA(int a) throws Exception1,Exception3{......} 1、throws出現在方法函數頭,聲明函數可能拋出的所有異常(用在方法聲明後面,表示異常由該方法的調用者處理);而throw出現在函數體,拋出一個異常實例,由方法體內的語句處理。
2、兩者都是消極處理異常的方式(消極並不是說不好),只是異常不會由函數處理,而是由函數的上層調用處理。</p>
(拋出一個異常是爲了,在有些時候,出現某些錯誤,原來在頁面上出現相應的錯誤,而不是報一堆代碼錯誤,空指針等)
一種寫法:
package yiccl;
class MyException extends Exception {
private int id;
MyException(String Message, int id) {
super(Message);
this.id = id;
}
int getId() {
return id;
}
}
//在throw一個異常之後, 方法體將異常在方法頭上將異常拋出了,在後面調用方法體的時候,必須捕獲這個異常
//(try塊裏面,異常後面的語句不會執行,try塊外面的語句都會執行)
public class pcyc
{
public void regist(int num) throws MyException{
if(num<0){
throw new MyException("人數爲負數,不合理", 3);
}
//拋出異常就不執行下面的打印語句
System.out.println("登錄人數"+num);
}
public static void main(String args[]) {
pcyc aa=new pcyc();
try {
aa.regist(-100);
System.out.println("aaa");
} catch (MyException e) {
//TODO Auto-generated catch block
e.printStackTrace();
System.out.println("bbb");
}
System.out.println("ccc");
}
}
第二種寫法:
//自己定義一個異常的時候,通過throw new 一個異常,可以將異常捕獲了,這樣在其他方法調用的時候,就不用捕獲異常了。
package yiccl;
class MyException extends Exception{
private int id;
MyException(String Message,int id)
{
super(Message);
this.id=id;
}
int getId()
{
return id;
}
}
public class testycer {
public void regist(int num) {
if(num<0){
try {
throw new MyException("人數爲負數,不合理", 3);
} catch (MyException e) {
e.printStackTrace();
}
}
System.out.println("登錄人數"+num);
}
public static void main(String args[]) {
testycer aa=new testycer();
aa.regist(-100);
}
}