【Java基礎】--異常處理
異常概念
程式執行期出現的異常事件。良好的程式應該在異常發生的時候提供處理這些異常的方法,使得程式不會因為異常的發生而阻斷或產生不可預見的結果。
異常處理原理
異常分類
Throwable是所有錯誤或異常的超類。
Exception指出了合理的應用程式想要捕獲的條件。
RuntimeException是可能在Java虛擬機器正常執行期間丟擲的異常的超類。
Error用於指示合理的應用程式不應該試圖捕獲的嚴重問題。
使用異常的Demo:
import java.io.*;
public class TestEx{
public static void main(String args[]){
FileInputStream in =null;
try{
in =new FileInputStream("myfile.txt");//必須對它進行捕捉或宣告丟擲
int b;
b=in.read();
while(b!=-1){
// System.out.print((char )b);
System.out.print((char)b);
b=in.read();
}
}catch(FileNotFoundException e){//可以在try後面加多個Catch來捕獲異常,但是遵循先小後大
e.printStackTrace();
}catch(IOException e){
System.out.println(e.getMessage());
}finally{
try{
in.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
void m(int i ) throws ArithmeticException{
if (i==0){
throw new ArithmeticException("被除數為0");
}
}
}
捕獲異常前程式執行結果:
異常捕獲處理
關鍵字
try: 包含可能產生例外的程式碼 ,後面跟一個或多個catch程式碼段。
catch:宣告處理的一種特定型別的異常並提供處理的方法。
finally:異常發生,程式會終止當前的流程,根據獲取異常去執行相應的catch程式碼,但是無論異常是否產生,程式始終會執行相應的finally程式碼段,一般釋放資源的程式碼經常寫在finally裡面。比如:開啟一個檔案,無論出錯不出錯,都要把檔案關閉,在finally面就寫把檔案關閉的程式碼。
throw:丟擲一個具體的異常型別。常在方法內通過throw宣告一個具體的異常資訊。需要使用者自己捕獲,然後對其進行相關包裝,最後在將包裝後的異常資訊丟擲。
throws:用來宣告一個方法可能丟擲的所有異常資訊。通過在一個方法的宣告處定義通過throws宣告方法可能丟擲的異常資訊。
例項:
public Test()throws RepletException{
try{
System.out.println("Test this Project!")
}
catch(Exception e){
throw new Exception(e.toString());
}
}
總結
一個優秀的程式設計師,要有良好的程式設計習慣。異常處理是必不可缺的程式碼能力之一。異常處理讓接受和處理錯誤程式碼進行解耦和。理清了程式設計者的思緒,增強了程式碼的可讀性,方便了維護者的閱讀和理解。
2016年1月26日 補充DRP中學的一個異常的例項:
package com.bjpowernode.drp.basedata.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.bjpowernode.drp.basedata.domain.Item;
import com.bjpowernode.drp.util.ApplicationException;
import com.bjpowernode.drp.util.DbUtil;
import com.bjpowernode.drp.util.PageModel;
/**
* @ClassName:ItemDao4OracleImpl
* @Description:物料Oracle的具體實現
* @author wm
* @date 2016年1月25日下午4:12:30
*/
public class ItemDao4OracleImpl implements ItemDao {
public void addItem(Connection conn, Item item) {
String sql="insert into drp1.t_items (item_no,item_category_id,item_unit_id,item_name,spec,pattern, rowid)";
sql+= "values(?,?,?,?,?,?,?)";
PreparedStatement pstmt=null;
try {
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, item.getItemNO());
pstmt.setString(2, item.getItemName());
pstmt.setString(3, item.getSpec());
pstmt.setString(4, item.getPattern());
pstmt.setString(5, item.getItemCategory().getId());
pstmt.setString(6, item.getItemUnit().getId());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new ApplicationException("新增物料失敗!");
}finally{
DbUtil.close(pstmt);
}
}
}
執行時異常處理類:
/**
*
*/
package com.bjpowernode.drp.util;
/**
* @ClassName:ApplicationException
* @Description:執行期異常
* @author wm
* @date 2016年1月26日下午2:14:08
*/
public class ApplicationException extends RuntimeException {
/**
*
*/
public ApplicationException() {
// TODO Auto-generated constructor stub
}
/**
* @param message
*/
public ApplicationException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
/**
* @param cause
*/
public ApplicationException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
/**
* @param message
* @param cause
*/
public ApplicationException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
/**
* @param message
* @param cause
* @param enableSuppression
* @param writableStackTrace
*/
public ApplicationException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
}
補充:2016年1月28日
異常的處理方式
1.根據每種業務語義建立不同的異常,如果UserNotFoundException
2.每層丟擲相應的異常,如DaoException ,ServiceException
3.每個模組丟擲一種異常,如SysMgrException
4.只丟擲一種異常,如AppException
5.錯誤碼可以做到異常粒度劃分,採用錯誤碼可以減少異常類的建立。
相關文章
- Python基礎 -- 異常處理Python
- PHP基礎:異常處理ExceptionPHPException
- python 基礎之異常處理Python
- C#基礎之前處理器,異常處理C#
- Oracle開發基礎-異常處理Oracle
- JAVA 異常處理Java
- Java 異常處理Java
- JAVA異常處理Java
- JAVA_異常處理Java
- Java基礎-異常Java
- Java基礎 — 異常Java
- [Java基礎]異常Java
- Java 異常表與異常處理原理Java
- Util應用框架基礎(五) - 異常處理框架
- Java異常處理(非常全面)Java
- Java異常處理機制Java
- 重學Java - 異常處理Java
- java異常處理筆記Java筆記
- 異常篇——異常處理
- Java 的異常處理機制Java
- Java之異常處理try{}catch(){}Java
- Java進階02 異常處理Java
- JAVA學習之異常處理Java
- java異常的處理機制Java
- Java 異常處理:使用和思考Java
- Python基礎入門(7)- Python異常處理機制Python
- Java基礎知識——異常Java
- Java基礎 ---Throwable異常類Java
- 異常處理
- Java異常處理12條軍規Java
- Java入門教程十一(異常處理)Java
- 甩鍋(throws)_ java異常(Exception)處理JavaException
- Java 中的異常處理機制Java
- [轉載] Java異常處理習題Java
- JAVA物件導向基礎--異常Java物件
- JSP 異常處理如何處理?JS
- 異常-throws的方式處理異常
- React 異常處理React
- JS異常處理JS