Java中異常機制的幾點思考

1.對異常處理的語法檢查是在編譯期進行的,而非運行期。也就是說即使某拋出了異常但未被正確處理的方法,在執行期並未被真正調用,也會編譯出錯。如下面的
ExtendExcepDemo1.java代碼中,Test類中建立了A類的對象a,並調用了a的方法show(),儘管在main()函數中並未調用function1,但仍會在編譯期間出錯。

//ExtendExcepDemo1.java代碼
class AException extends Exception
{
}

class A
{
	public void show() throws AException
	{
		System.out.println("Hello AException!");
	}
}

class Test
{
	void function1() //throws AException 第一種方法:拋出異常
	{

		A a=new A();
		a.show();
		// a.show();   第三種方法:不調用show()方法
/*		第二種方法:捕獲異常並處理
		try
		{
			A a=new A();
			a.show();
		}
		catch (AException a)
		{
		}
*/
	}
	void function2()
	{
		System.out.println("Hello rui");
	}
}


class ExtendExcepDemo1 
{
	public static void main(String[] args)
	{
		Test t=new Test();
		t.function2();
		
	}
}


解決編譯出錯的方法有以下三種:如代碼中註釋部分
一是拋出異常;
二是捕獲並處理異常;
三是取消對方法show()的調用。
其中第三種方法也表明,異常的拋出與處理是針對方法的,儘管建立了A類對象,但只要不調用異常相關的方法,仍然不會編譯出錯。

2.一個方法若拋出了異常,那麼任何調用該方法的方法都必須拋出異常或捕獲異常(但當其中的某一級方法捕獲並處理異常後,之後再調用該方法便無需處理異常)。
如ExtendExcepDemo1.java代碼中,由於A類的show()方法拋出了異常,那麼在Test類中的function1方法若調用了show()方法,就必須拋出異常或捕獲AException異常。
(1)若function1方法選擇拋出異常,那麼ExtendExcepDemo1類中的main()函數就必須拋出異常(給虛擬機)或捕獲異常並處理,參考ExtendExcepDemo2.java中的代碼:

//ExtendExcepDemo2代碼
class AException extends Exception
{
}

class A
{
	public void show() throws AException
	{
		System.out.println("Hello AException!");
	}
}

class Test
{
	void function1() throws AException
	{
		A a=new A();
		a.show();
	}
	void function2()
	{
		System.out.println("Hello rui");
	}
}


class ExtendExcepDemo2 
{
	public static void main(String[] args) throws AException
	{
		Test t=new Test();
		t.function2();
		
	}
}


(2)若function1方法捕獲並處理異常,那麼ExtendExcepDemo1類中的main()函數就無需再對異常做任何拋出或捕獲操作,參考ExtendExcepDemo3.java中的代碼: 

//ExtendExcepDemo3代碼
class AException extends Exception
{
}

class A
{
	public void show() throws AException
	{
		System.out.println("Hello AException!");
	}
}

class Test
{
	void function1() 
	{
		try
		{
			A a=new A();
			a.show();
		}
		catch (AException e)
		{
		}
	}
	void function2()
	{
		System.out.println("Hello rui");
	}
}


class ExtendExcepDemo3 
{
	public static void main(String[] args) 
	{
		Test t=new Test();
		t.function2();
		
	}
}

發佈了46 篇原創文章 · 獲贊 23 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章