10、異常


十、異常

1、系統結構圖(xmind)


2、tips

——1.throw和throws的區別

1.throws用於標識函數暴露出的異常類,並且可以拋出多個,用逗號分隔。throw用於拋出異常對象。

2.thorws用在函數上,後面跟異常類名。throw用在函數內,後面跟異常對象。

       定義功能方法時,需要把出現的問題暴露出來讓調用者去處理,那麼就通過throws在函數上標識。在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。


——2.異常的分類

1.編譯時被檢測異常:這種問題一旦出現,希望在編譯時就進行檢測,讓這種問題有對應的處理方式,這樣的問題都可以針對性的處理。

2.編譯時不被檢測異常(運行時異常):這種問題的發生,無法讓功能繼續,更多是因爲調用的原因導致的或者引發了內部狀態的改變導致的,這種問題一般不處理,直接編譯通過,在運行時,讓調用者調用時的程序強制停止,讓調用者對代碼進行調整。所以自定義異常時要麼繼承Exception,要麼繼承RuntimeException。


——3.格式與注意事項

RuntimeException是那些可能在Java虛擬機正常運行期間拋出的異常的超類。
可能在執行方法期間拋出但未被捕獲的RuntimeException的任何子類都無需在throws子句中進行聲明。
異常處理的捕捉形式:
可以對異常進行針對性處理的方式。
具體格式是:
try

{
       //需要被檢測異常的代碼。
}
catch(異常類變量)//該變量用於接收發生的異常對象
{
       //處理異常的代碼。
}
finally

{
       //一定會執行的代碼;
}


注意事項:
finally代碼塊只有一種情況不會被執行,就是在之前執行了System.exit(0)。
處理過程:
try中檢測到異常會將異常對象傳遞給catch,catch捕獲到異常進行處理。
finally裏通常用來關閉資源。比如:數據庫資源,IO資源等。
需要注意:try是一個獨立的代碼塊,在其中定義的變量只在該變量塊中有效。
如果在try以外繼續使用,需要在try外建立引用,在try中對其進行初始化。IO,Socket就會遇到。


/*
老師用電腦:
有兩個對象:電腦,老師

其中涉及兩個問題:
比如藍屏,冒煙。

*/
class lanpinException extends Exception
{
	lanpinException(String msg)
	{
		super(msg);
	}
}
class maoyanException extends Exception
{
	maoyanException(String msg)
	{
		super(msg);
	}
}
class NoplanException extends Exception
{
	NoplanException(String msg)
	{
		super(msg);
	}
}
//描述電腦對象,拋出藍屏和冒煙兩個異常。
class computer
{
	private int state = 1;//0,2
	public void run()throws lanpinException,maoyanException
	{
		if(state == 1)
			throw new lanpinException("電腦藍屏了");
		if(state == 2)
			throw new maoyanException("電腦冒煙了");
		System.out.println("電腦運行");
	}
	//重啓功能
	public void reset()
	{
		state = 0;
		System.out.println("電腦重啓");
	}
}
//老師對象,使用電腦,當電腦冒煙異常觸發時,拋出計劃外異常
class teacher
{
	private String name;
	private computer comp;
	//老師這個對象有使用電腦的行爲以及老師姓名的屬性
	teacher(String name)
	{
		this.name = name;
		comp = new computer(); 
	}
	//老師有講課功能,講課中使用電腦可能出現異常,捕捉
	public void prelect()throws NoplanException
	{
		try
		{
			comp.run();
			System.out.println(name+"講課");
		}
		catch (lanpinException e)
		{
			System.out.println(e.toString());
			comp.reset();
			prelect();
		}
		catch (maoyanException e)
		{
			System.out.println(e.toString());
			test();
			throw new NoplanException("課時無法進行,原因:"+e.getMessage());
		}
	}
	public void test()
	{
		System.out.println("大家練習");
	}
}
class ExceptionDemo2
{
	public static void main(String[] args)
	{
		//創建老師對象,講課期間可能出現異常,捕捉
		teacher t = new teacher("老師");
		try
		{
			t.prelect();
		}
		catch (NoplanException e)
		{
			System.out.println(e.toString()+"...換人");
		}
	}
}

運行結果:

          





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