JAVA學習第十九課(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程序的異常處理 (二))