一.使用try-catch捕獲單個異常數據庫
若是異常出現的話,會當即終止程序,咱們得處理異常:網絡
1) :該方法不處理,而是聲明拋出,由該方法的調用者來處理,(throws)框架
2) :在方法中使用try-catch的語句塊來處理異常-jvm
使用try-catch捕獲單個異常: ide
語法以下:spa
try{設計
編寫可能會出現異常的代碼調試
}catch(異常類型 e){日誌
處理異常的代碼對象
//記錄日誌/打印平常信息,繼續拋出異常
}
注意:catch 和try都不能單獨使用
二.獲取和查看異常信息
1) :String getMessage(): 獲取異常的描述信息,緣由
2) String toString():獲取異常的類型和異常描述的信息(通常不用)
3) :void printStackTrace():打印異常的跟蹤棧信息並輸出到控制檯.不須要使用System
包含了異常的類型.異常的緣由,還包括了異常出現的位置,在開發調試階段,都得使用printStackTrace
如今在catch語句塊中,必須寫: e.printStackTrace(); 目的:查看異常的具體信息,方便調試和修改.
三.使用try-catch捕獲多個異常
try{
編寫可能會出現異常的代碼
}catch(異常類型A e){當try中出現A類型異常,就用該catch來捕獲
處理異常的代碼1
//記錄日誌/打印平常信息,繼續拋出異常
}catch(異常類型B e){當try中出現B類型異常,就用該catch來捕獲
處理異常的代碼2
//記錄日誌/打印平常信息,繼續拋出異常
}
注意:代碼在一瞬間只能出現一種類型的異常,只須要一個catch捕獲,不可能同時出現多個異常.
Exception放在最後
四.保證關閉資源的finally代碼塊
finally語句塊表示最終都會執行的代碼, 不管有沒有異常.
何時的代碼必須最終執行
當咱們在try語句塊中打開了一些物理資源(磁盤文件/網絡鏈接/數據庫鏈接等).咱們都得在使用完以後,最終關閉打開的資源,
finally的語法
1) : try........finally: 此時沒有catch來捕獲異常, 由於此時根據應用場景,咱們會拋出異常, 本身不處理
2) : try.....catch .........finally: 自身須要處理異常, 最終還得關閉資源.
注意:finally不能單獨使用.
當只有在try或catch中調用退出jvm的相關方法, 此時finally纔不會執行,
不然finally永遠會執行
System.exit(0)://退出jvm
--------------------------------------------------------------------------------------------
必須使用finally才能保證最終必須執行的代碼
如果finally有return語句,永遠返回finally中的結果,避免該狀況,
六.異常的分類
1) : 編譯時期異常,checked異常.在編譯時期,就會檢查,若是沒有處理異常,則編譯失敗
2) : 運行時期異常,runtime異常,在運行時期, 檢查異常,在編譯時期, 運行異常不會編譯器檢測(不報錯)
運行異常: 在編譯時期, 可處理,可不處理.
如何肯定某一個類是編譯異常仍是運行異常
返回錯誤結果-throw語句
拋出異常:
throw:運用於方法內部,用於給調用者返回一個異常對象,和returm同樣,會結束當前方法
throws: 運用於方法聲明之上,用於表示當前方法不處理異常,而是提醒該方法的調用者來處理異常(
(拋出異常)
//表示: 在本方法中不處理某種類型的異常, 提醒調用者須要來處理異常
如:private static int divide(int num1,int num2) throws Exception
若是每個方法都放棄處理異常,都直接經過throws聲明拋出,最後異常會拋到main方法.
若是此時mian方法不處理,繼續拋出給jvm,底層的處理機制就是打印異常的跟蹤棧信息
runtime異常,默認就是這種處理方式.
throw語句:
運用於方法內部,拋出一個具體的異常對象,
throw new 異常類(「異常信息」);終止方法.
throw:
通常的,當一個方法出現不正常的狀況的時候,咱們不知道該方法應該返回什麼,此時就返回一個錯誤,
在catch語句塊中繼續向上拋出異常
return是返回一個值,throw是返回一個錯誤, 返回給該方法的調用者
微觀上分析和理解框架各個模塊的設計細節
宏觀上分析和把控框架總體的設計思想