throws和throw拋出異常的使用規則

一直對java中的throws和throw不太理解。最近一直在查這兩個方面的資料,算是能明白一點吧。若是我下面的觀點哪有不對,但願指出來,我加以改進。java

    
   throw:(針對對象的作法)
   拋出一個異常,能夠是系統定義的,也能夠是本身定義的。下面舉兩個例子:
   
拋出Java中的一個系統異常:
public class One {
public void yichang(){
NumberFormatException e = new NumberFormatException();
throw e;
}
public static void main(String[] args){
One test = new One();
try{
test.yichang();
}catch(NumberFormatException e){
System.out.println(e.getMessage());
}
}
}
 

 

拋出一個自定義的異常:
 
public class People {
 public static int check(String strage) throws MyException{
 int age = Integer.parseInt(strage);
 if(age < 0){
 throw new MyException("年齡不能爲負數!");
 }
 return age;
 }
 public static void main(String[] args){
 try{
 int myage = check("-101");
 System.out.println(myage);
 }catch(NumberFormatException e){
 System.out.println("數據格式錯誤");
 System.out.println("緣由:" + e.getMessage());
 }catch(MyException e){
 System.out.println("數據邏輯錯誤");
 System.out.println("緣由:" + e.getMessage());
 }
 }
}
public class MyException extends Exception{
 private static final long serialVersionUID = 1L;
 private String name;
 public MyException(String name){
 this.name = name;
 }
 public String getMessage(){
 return this.name;
 }
}

 

 
     throws:(針對一個方法拋出的異常)
    拋出一個異常,能夠是系統定義的,也能夠是本身定義的。
 
拋出java中的一個系統異常:
public class One {
public void yichang() throws NumberFormatException{
int a = Integer.parseInt("10L");
}
public static void main(String[] args){
One test = new One();
try{
test.yichang();
}catch(NumberFormatException e){
System.out.println(e.getMessage());
}
}
}
 

 

拋出一個自定義異常:
 
public class People {
public static int check(String strage) throws MyException{
int age = Integer.parseInt(strage);
if(age < 0){
throw new MyException("年齡不能爲負數!");
}
return age;
}
public static void main(String[] args){
try{
int myage = check("-101");
System.out.println(myage);
}catch(NumberFormatException e){
System.out.println("數據格式錯誤");
System.out.println("緣由:" + e.getMessage());
}catch(MyException e){
System.out.println("數據邏輯錯誤");
System.out.println("緣由:" + e.getMessage());
}
}
}
 
public class MyException extends Exception{
private static final long serialVersionUID = 1L;
private String name;
public MyException(String name){
this.name = name;
}
public String getMessage(){
return this.name;
}
}
 

 

那麼下面我要說究竟何時用哪一種:
 
 若是是系統異常的話能夠什麼都不用作,也能夠針對方法拋出一個異常,因 爲系統異常是能夠被系統自動捕獲的,因此這個異常到底是要在方法內部解決仍是交給上層函數去解決其實效果是同樣的。 可是我查了不少資料,即便會拋出異常能被系統所捕獲的話仍是建議針對方法寫一個throws,由於這樣在完成一個大型任務的時候可讓別的程序員知道這裏會出現什麼異常。
 
若是是本身定義的異常,則必需要用throws拋出該方法可能拋出的異常,不然編譯會報錯。
相關文章
相關標籤/搜索