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);  
  }  
    
    
  }  


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