try... catch 和throw的區別

try...catch和throws的區別是(拋出和捕獲的區別),如果一個方法中用throws,那麼這個方法會向上拋出一個異常,那麼調用這個方法的時候,把這個調用放在try..catch裏面。  
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);  
  }  
    
    
  }  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章