I學霸官方免費教程三十八 :Java基礎教程之異常

來源:互聯網
上載者:User

標籤:java異常   關鍵字try   關鍵字catch   關鍵字finally   關鍵字throw   關鍵字throws   

異常

程式中不正常的情況分為兩大類:錯誤(Error)和異常(Exception)

錯誤(Error):程式本身無法對這種不正常的情況進行處理,將會導致程式崩潰;
例如:記憶體耗盡錯誤,JVM崩潰錯誤等
異常(Exception):程式可以特殊的代碼,對不正常的情況進行捕獲和處理,程式可以繼續運行;
例如:除零異常,null 指標異常,數組下標越界異常

捕獲異常

文法格式1:try{ //可能出現異常的代碼  }catch(異常類 變數名){//出現異常後的處理代碼//printStackTrace();方法會輸出棧記憶體中的異常資訊變數名. printStackTrace();}文法格式2:try{//可能出現異常的代碼}finally{//finally塊:一般釋放資源的語句,比如關閉流,關閉資料庫的串連}finally:不管try中的代碼是否出現異常,都會執行finally塊中的代碼文法格式3:try{    }catch(異常類 變數名){}finally{  //即使try塊或catch塊中出現return語句,finally塊中依然會執行 //如果在try塊或catch塊中出現System.exit(int);語句,finally塊將無法執行}多重catch塊:多重catch塊中的異常類,一定是從小到大排列,兄弟異常類不分順序try{    }catch(子異常類 變數名){}catch(子異常類 變數名){}catch(父異常類 變數名){}...[finally{}]try、catch和finally都不能單獨存在,但是try和catch 、 try和finally 可以在一起使用,catch和finally不能單獨在一起使用


聲明異常

文法格式:[存取修飾詞] 傳回值類型 方法名() throws 異常類{}

拋出異常

文法格式:throw 異常對象;

執行個體:package exception;/** * 示範異常的聲明和拋出 *  * @author 學霸聯盟 - 趙燦 */public class ExceptionDemo {//聲明方法m1,並聲明該方法會出現一個RuntimeException類型的異常public void m1() throws RuntimeException {/* * 拋出一個RuntimeException類型的異常,沒有使用try-catch捕獲 * 使用聲明異常的方式,將此處拋出的異常交給調用者m2處理 * 聲明異常的類型,必須是拋出異常類型或其父類型 */throw new RuntimeException();}//聲明方法m2,並聲明該方法會出現一個Exception類型的異常public void m2() throws Exception {try {// 調用聲明了RuntimeException異常的方法m1// 並使用try-catch處理m1中拋出的異常m1();/*因為catch塊是按照異常類型匹配捕獲的,而方法m1聲明的是RuntimeException;所以catch的小括弧中只能聲明RuntimeException或RuntimeException父類型的變數不能聲明RuntimeException的子類變數,因為這樣不能保證異常被捕獲 */} catch (Exception ex) {// 此處拋出了一個Exception類型的異常// 沒有使用try-catch進行捕獲處理,所以該方法也必須聲明異常throw new Exception();} finally {/* * 不管try和catch塊中的代碼是否拋出異常,finally塊中的代碼都會執行 * 即使try或catch塊中執行了return語句,finally塊中的代碼也會執行 * 除非try或catch塊中執行了System.exit(int); * 或出現錯誤導致JVM崩潰,finally將不再執行 */}}// 方法m3public void m3() {try {/* * 調用聲明了Exception異常的方法m2,而m3沒有聲明異常, * 所以必須使用try-catch塊處理方法m2產生的異常 */m2();} catch (Exception ex) {/* * 拋出Exception類型的異常,而且沒有使用try-catch進行捕獲,也沒有聲明異常; * 但是在finally塊中使用的return語句,所以代碼可以正常編譯和執行 */throw new Exception();} finally {/* * finally塊中使用了return語句; * 會將catch塊中拋出的Exception類型的異常覆蓋; * 所以該方法可以既不聲明異常,也不使用try-catch處理catch塊中拋出的異常; * 一般不建議這樣使用 */return;}}public static void main(String[] args) {ExceptionDemo t = new ExceptionDemo();t.m1();}}


自訂異常

繼承Exception或Exception的子類

執行個體:/*** 示範自訂異常類* @author 學霸聯盟 - 趙燦*/public class MyExceptionDemo extends Exception{public static void main(String[] args) {try {throw new MyException();} catch (MyException e) {//調用printStackTrace方法e.printStackTrace();}}}/*** 建立自訂異常類MyException,繼承Exception類或Exception的子類* @author 學霸聯盟 - 趙燦*/class MyException extends Exception{/** * 重寫父類中的printStackTrace */@Overridepublic void printStackTrace() {System.out.println("恭喜你,中了我的自訂異常!");}}





本文出自 “學霸聯盟教育官方部落格” 部落格,轉載請與作者聯絡!

I學霸官方免費教程三十八 :Java基礎教程之異常

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.