閱讀885 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java異常--其他概念—throw、throws、Exception、RuntimeException、斷言

1、throws關鍵字


假設定義一個除法的方法div(),對於除法來說:有可能出現異常,有可能不出現異常。所以對於這樣的方法來說,最好使用throws關鍵字進行聲明。一旦出現了異常,則交給調用處處理。
因為div()方法使用了throws關鍵字聲明。所以調用此方法的時候,必須進行異常處理。
class Math{
	public int div(int i,int j) throws Exception{	// 定義除法操作,如果有異常,則交給被調用處處理
		int temp = i / j ;	// 計算,但是此處有可能出現異常
		return temp ;
	}
};
public class ThrowsDemo01{
	public static void main(String args[]){
		Math m = new Math() ;		// 實例化Math類對象
		try{
			System.out.println("除法操作:" + m.div(10,2)) ;
		}catch(Exception e){
			e.printStackTrace() ;	// 打印異常
		}
	}
};
如果在主方法的聲明中使用了throws關鍵字,則主方法也可以不處理異常了。則將一切異常交給JVM進行處理。
class Math{
	public int div(int i,int j) throws Exception{	// 定義除法操作,如果有異常,則交給被調用處處理
		int temp = i / j ;	// 計算,但是此處有可能出現異常
		return temp ;
	}
};
public class ThrowsDemo02{
	// 在主方法中的所有異常都可以不使用try...catch進行處理
	public static void main(String args[]) throws Exception{
		Math m = new Math() ;		// 實例化Math類對象
		System.out.println("除法操作:" + m.div(10,0)) ;
	}
};

2、throw關鍵字


在異常處理中,try語句中藥捕獲的是一個異常的對象,那麼此異常對象也可以自己拋出。
public class ThrowDemo01{
	public static void main(String args[]){
		try{
			throw new Exception("自己拋著玩的。") ;	// 拋出異常的實例化對象
		}catch(Exception e){
			System.out.println(e) ;
		}
	}
};

3、throw與throws應用範例

例如:要設計一個相除的方法,但是在進行操作之前必須打印“計算開始”的信息、結束之後打印“計算結束”的信息。如果有異常的話,則應該吧異常交給被調用處處理。
class Math{
	public int div(int i,int j) throws Exception{	// 定義除法操作,如果有異常,則交給被調用處處理
		System.out.println("***** 計算開始 *****") ;
		int temp = 0 ;	// 定義局部變量
		try{
			temp = i / j ;	// 計算,但是此處有可能出現異常
		}catch(Exception e){
			throw e ;
		}finally{	// 不管是否有異常,都要執行統一出口
			System.out.println("***** 計算結束 *****") ;
		}
		return temp ;
	}
};
public class ThrowDemo02{
	public static void main(String args[]){
		Math m = new Math() ;
		try{
			System.out.println("除法操作:" + m.div(10,0)) ;
		}catch(Exception e){
			System.out.println("異常產生:" + e) ;
		}
	}
};

4、Exception與RuntimeException的區別

public class RuntimeExceptionDemo01{
	public static void main(String args[]){
		String str = "123" ;	// 定義字符串,全部由數字組成
		int temp = Integer.parseInt(str) ; // 將字符串變為int類型
		System.out.println(temp * temp) ;	// 計算乘方
	}
};
parseInt()方法的定義格式為:
public static int parseInt(String s) throws NumberFormatException
在此方法中明明已經使用了throws關鍵字拋出異常,為什麼不用處理,編譯也能通過呢??

5、自定義異常類

隻需要繼承Exception就可以完成自定義異常類。
class MyException extends Exception{	// 自定義異常類,繼承Exception類
	public MyException(String msg){
		super(msg) ;	// 調用Exception類中有一個參數的構造方法,傳遞錯誤信息
	}
};
public class DefaultException{	
	public static void main(String args[]){
		try{
			throw new MyException("自定義異常。") ;	 // 拋出異常
		}catch(Exception e){
			System.out.println(e) ;
		}
	}
}

6、斷言(assert)




7、總結






最後更新:2017-04-03 14:53:37

  上一篇:go HDU 1115 求多邊形重心
  下一篇:go poj 2707 Copier Reduction