初步學習對於異常的總結

異常:

通俗講就是程序在運行時出現不正常情況。

  1. 異常由來
    問題也是現實生活中一個具體的事物,也可以通過java的類的形式進行描述。並封裝成對象。
    其實就是java對不正常情況進行描述後的對象體現。

    對於問題的劃分 兩種:一種是嚴重的問題,一種非嚴重的問題。

-對於嚴重的,java通過Error類進行描述。
對於Error- -般不編寫針對性的代碼對其進行處理.


-對與非嚴重的,java通 過Exception類進行描述。
對於Exception可以使用針對性的處理方式進行處理。

無論Error或者Exception都具有一些共性 內容。
比如:不正常情況的信息,引發原因等。

  1. 異常的處理
    java提供了特有的語句進行處理。
try
	{
		需要被檢測的代碼;
	}
	catch(異常類變量)
	{
		處理異常的代碼;(處理方式)
	}
	finally
	{
		一定會執行的語句
	}
  1. 對捕獲到的異常對象進行常見方法操作
    string getMessage () : 獲取異常的信息
    String toString():異常名稱,異常信息
    e.printStackTrace();異常名稱,異常信息,異常出現的位置

  2. 對多異常的處理.

    • 聲明異常時,建議聲明更爲具體的異常。這樣處理的可以更具體。
    • 對方聲明幾個異常,就對應有幾個catch塊。 不要定義多餘的catch塊。
      如果多個catch塊中的異常出現繼承關係,父類異常catch塊放在最下面。
    • 建立在進行catch處理時,catch中一 定要定義具體處理方式。
      不要簡單定義一句e.printstackTrace(),也不要簡單的就書寫一條輸出語句

自定義異常。

基本操作
當在函數內部出現了throw拋出異常對象,那麼就必須要給對應的處理動作。
要麼在內部try catch處理。
要麼在函數.上聲明讓調用者處理。
一般情況在,函數內出現異常,函數上需要聲明。

  • 如何定義異常信息呢?
    因爲父類中已經把異常信息的操作都完成了.
    所以子類只要在構造時,將異常信息傳遞給父類通過super語句.
    那麼就可以直接通過getMessage方法獲取自定義的異常信息。

  • 自定義異常:
    必須是自定義類繼承Exception.

  • 繼承Exfeption原因:
    異常體系有一個特點:因爲異常類和異常對象都被拋出.
    他們都具備可拋性。這個可拋性是Throwable這個體系中獨有特點。
    只有這個體系中的類和對象纔可以被throws和throw操作。
    throws和throw有侷限性,只有繼承了Exception,Throwable,Error可以用

    • throws和throw區別:
      1)作用不同:
      throw用於程序員自行產生並拋出異常;
      throws用於聲明在該方法內拋出了異常
      2) 使用的位置不同:
      throw位於方法體內部,可以作爲單獨語句使用;
      throws必須跟在方法參數列表的後面,不能單獨使用。
      3)內容不同:
      throw拋出一個異常對象,且只能是一個;
      throws後面跟異常類,而且可以有多個。

異常與自定義異常代碼見如下

  • 異常練習代碼
class Demo1
{
	int div(int a,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException //在功能上通過throws的關鍵字聲明瞭該功能有可能會出現問題.
										//在函數上聲明異常.	
	{									
		int [] arr = new int[a];		//便於提高安全性,讓調用出進行處理。不處理編譯失敗.
		System.out.println(arr[4]);
		return a/b;    //除0  產生 new AritchmeticException()
	}
	
	
}
public class 面向對象09_06異常 {
	public static void main(String[] args)//throws Exception  拋出異常
	{
		Demo1 d=new Demo1();
		try 
		{
			//需要被檢測的代碼;
			int x = d.div(5, 0);//除0  產生 new AritchmeticException()
			System.out.println("x="+x);
		} 
		catch (ArithmeticException e) //(異常類變量)Exception e = new AritchmeticException()
		{
			//處理異常的代碼;(處理方式)
			//一般工程裏面搞個日誌文件便於管理者處理異常
			//不可以簡單的一個輸出語句
			System.out.println("除零了"+'\n');
			System.out.println(e.getMessage()+'\n');//異常信息
			System.out.println(e.toString()+'\n');//異常名稱,異常信息
			
			e.printStackTrace();//異常名稱,異常信息,異常出現的位置
			
		}
		
		catch (ArrayIndexOutOfBoundsException e) 
		{
			System.out.println("數組越界了"+'\n');
			System.out.println(e.toString()+'\n');
		}
		System.out.println("over");
	}
}
  • 自定義異常練習代碼
//自定義異常
class FuShuExceotion extends Exception
{
/*	
	class Throwable   //是Exception子類
	{
		private String msg;
		Throwable(String msg)
		{
			this.msg=msg;
		}
		public String Getmsg()
		{
			return msg;
		}
	}
*/
	
	
	private int value;
	public FuShuExceotion(String msg,int value)
	{
		super(msg);//繼承了上面父類 Throwable
		this.value=value;
	}
	public int GetValue()
	{
		return value;
	}
}

class Demo2
{
	int div(int a,int b) throws FuShuExceotion
	{
		if(b<0)
			throw new FuShuExceotion("出現了除數是負數的情況  	/by fushu",b);
				//手動通過throw關鍵字拋出一個自定義異常對其定義情況
		return a/b;
	}
}
public class 面向對象09_09自定義異常 {
	public static void main(String[] args) 
	{
		Demo2 d = new Demo2();
		try 
		{
			//測試語句
			int x= d.div(4, -1);
			System.out.println("x="+x);
		} 
		catch (FuShuExceotion e) 
		{
			//處理方法
			System.out.println(e.toString());//異常名稱,異常信息
			System.out.println("錯誤的負數是:"+e.GetValue());
		}
	}
}

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