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

來源:互聯網
上載者:User

JAVA學習第十九課(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();  }//有catchcatch{.....  }}

 void show()throws Exception//沒catch,就要聲明{try {throw new Exception();  }//沒catchfinally  //串連資源,出現異常,但是這個異常不一定就要處理,但是資源一定要關閉,因為在內部開闢的,別人不知道{  ....   }}





幫忙用java編寫簡單例外處理常式,

public class Test{
public static void main(String[] args){
String s="123a";
try{
int i=Integer.parseInt(s);//將字串轉化為Int型
}catch(Exception e){
System.out.println("轉換有誤");
}
}

}
 
簡述Java異常處理的過程

java中對處理異常有兩個方法,一個是拋出異常,另一個是異常處理.
一 拋出異常
拋出異常就是在需要提示錯誤的時候,通過使用throw語句來拋出異常.例如:
int a = 1;
int b = 2;
if (a>b)
{
throw new Exception("a必須比b小");
}

二 異常處理
異常處理就是使用try catch語句對try塊中包圍的語句拋出的異常做處理,具體怎麼處理要看業務需要.例如:
try
{
.....//try塊包圍的是一段需要處理的代碼
}catch (Exception e)
{
e.printStackTrace();//catch塊是對在try塊中捕獲的異常進行處理,這裡是列印錯誤的堆棧資訊
}

一個try塊可以跟多個catch塊,最後還有個finally塊,用來執行try塊做完之後需要執行的代碼.例如:
try
{
.....
}catch (SQLException se)
{
se.printStackTrace();
}catch (FileNotFoundException fe)
{
fe.printStackTrace();
}catch (Exception e)
{
e.printStackTrace();
}finally
{
....
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.