1. 程式人生 > >JAVA學習第十九課(java程序的異常處理 (二))

JAVA學習第十九課(java程序的異常處理 (二))

num 函數 錯誤 style col 編譯失敗 return [] java

異常處理的捕捉形式:

這是能夠對異常進行針對性處理的方式


六、try、catch的理解


詳細格式:

try
{
//須要被檢測異常的代碼
}
catch(異常類 變量)//改變量用於接受發生異常的對象
{
//處理異常的代碼
}
finally
{
//一定會被運行的代碼
}

這三個代碼塊是一個總體。

try是嘗試,catch捕捉,finally終於化

什麽時候用try&catch。什麽時候用拋?

在定義功能時,假設這個問題你能夠處理的了,那麽就用try&&catch。處理不了那麽就用拋

代碼演示:

import java.util.*;
class FuException extends Exception
{
	FuException()
	{
	}
	FuException(String s)
	{
		super(s);//Exception有
		//System.out.println(s);
	}
}
class ExceptionDemo 
{//要麽捕捉,要麽拋出
	public int method(int[] arr,int index) throws FuException
	{
			if(index<0)
			{
			throw new FuException("The index is fushu");
		    }
		return arr[index];
	}
}
public class Main
{
	public static void main(String[] args)//throws FuException
	{
		int[] a = new int[10];
		ExceptionDemo C = new ExceptionDemo();
		try 
		{
			int num = C.method(a,-2);
			System.out.print("num"+num);
		} 
		catch (FuException e) 
		{
			System.out.println("角標為負數啦!");
		//e對象可用可不用,以下是一些經常使用的方法
			System.out.println("Message:"+e.getMessage());
		System.out.println("string:"+e.toString());//toString可省略
		//打印異常信息
		e.printStackTrace();//jvm默認的異常處理機制就是調用異常對象的這種方法
			
		}
	}	
}
技術分享

/*真正建立日誌文件

*log four(java; ; )

*{

*

*}

*/其簡寫形式:log4j


七、多catch情況

假設在程序處理時。拋出了多個異常

import java.util.*;
class FuException extends Exception
{
	FuException()
	{
	}
	FuException(String s)
	{
		super(s);//Exception有
		//System.out.println(s);
	}
}
class ExceptionDemo 
{
	public int method(int[] arr,int index) throws FuException,NullPointerException
	{
			if(index<0)
			{
			throw new FuException("The index is fushu");
		    }
			if (arr==null)
			{
				throw new NullPointerException("沒有數組實體");//可自己定義
			}
		return arr[index];
	}
}
public class Main
{
	public static void main(String[] args)//throws FuException
	{
		int[] a = new int[10];
		ExceptionDemo C = new ExceptionDemo();
		try 
		{
			int num = C.method(a,2);
			System.out.print("num"+num);
		}
		catch (FuException e) 
		{
			System.out.println("角標為負數啦!");	
		}
		catch (NullPointerException e) 
		{
			//e.printStackTrace();
			System.out.println("Message:"+e.getMessage());
		} 
		//多catch情況,假設有以下catch情況。不能房最上面。會接受全部對象
		catch (Exception e) 
		{
			//父類的catch房最以下,否則編譯失敗
			//假設實在出現已有catch以外的情況,虛擬機會處理
		}
	}	
}



八、異常的處理原則


try究竟什麽時候用?

最根本的核心:僅僅要使用了聲明異常的方法,就要try,僅僅要代碼中有拋出異常的動作,假設能處理就用try。見到了異常就處理,沒有異常就不須要處理。註意:沒有錯誤。非要寫try,不僅沒意義。還存在弊端。假設真的要處理異常。可是不知道是什麽異常,那麽僅僅能寫Exception。一旦未知異常真的發生了,可是卻有個預先處理的方式 ,處理什麽不知道,這個異常被處理掉了,一旦處理掉了,就相當於異常被隱藏,可是程序還在正常運行。所以,僅僅要沒說有問題,就不處理,僅僅要問題發生了。看到了。再考慮問題是否要處理

異常處理的原則:

1.函數內部假設拋出需要檢測的異常。函數上必需要聲明。否則必須在函數內部用try&&catch捕捉,否則編譯失敗

2.假設調用到了聲明異常的函數,要麽try&&catch,要麽throws。否則編譯失敗

3.什麽時候catch。什麽時候throws?

功能內部能夠解決,用catch

解決不了,用throws,由調用者解決

4.一個功能假設拋出了多個異常,那麽調用時必須相應多個catch,進行針對性的處理

(內部有幾個須要檢測的異常,就要拋幾個異常,拋幾個。就catch幾個)


九、finally代碼塊


/*finally的應用:
* 用到finally最多的地方,比方數據庫
* 比如:打開百度。搜索
* 連接數據庫
* 查詢:假如Exception了,查詢過程中出問題
* 關閉連接
*假設出現異常,不關閉連接,還在浪費數據庫資源,所以不管是否出現異常,關閉連接一定要運行
*進而釋放資源,故關閉連接定義在finally裏
*/

所以:凡是有資源須要關閉。一定要定義在finally裏。


try。catch,finally代碼塊組合的方式:

1、try,catch,finally(三個都有常見)

2、try、catch,沒有必要資源須要釋放時,就不是必需定義finally

3、try、finally 異常無法直接catch處理,可是資源一定要關閉

void show()//throws Exception,不用聲明。由於catch已經處理了
{
	try 
	{	throw new Exception();  }
	//有catch
	catch
	{	.....  }
}

 void show()throws Exception//沒catch,就要聲明
{
	try 
	{	throw new Exception();  }
	//沒catch
	finally  //連接資源,出現異常,可是這個異常不一定就要處理,可是資源一定要關閉,由於在內部開辟的。別人不知道
	{  ....   }
}




JAVA學習第十九課(java程序的異常處理 (二))