Java零基礎之異常(新手必看)
異常
本質上異常是程式上的錯誤,包括程式邏輯錯誤和系統錯誤
異常體系
所有異常的父類--------Throwable
- Error(不可處理)
- 執行期異常(RuntimeException)
- 非執行期異常
- Exception(可處理)
常見異常
-
IndexOutOfBoundsException
下標越界,例如陣列長度為5,卻操作第十位的資料
-
NullPointerExceptiopn
空指標異常,未賦值便操作
-
ArithmeticException
異常運算條件 例如:7除0
-
IllegalArgumentException
非法引數
-
ClassCastException
強制型別轉換例項錯誤,例如:
Man extends People
Woman extends People
People person = new Man( );
Woman xx = (Woman) person;
異常處理流程
try --catch–finally(總會執行,多用於釋放資源)
-
首先執行try中的程式碼塊
-
若有異常則進行catch捕獲異常,並根據異常的種類,執行不同的catch中的程式碼
-
無論如何最終都會執行finally中的程式碼
try嘗試 { 需要被檢測異常的程式碼 } catch(異常類 變數) { 處理異常的程式碼 } catch(異常類 變數) { 處理異常的程式碼 } finally最終化 { 一定會被執行的程式碼 }
異常處理原則
-
方法內如果丟擲需要檢測的異常,那麼方法上必須要宣告,否則必須在方法內用try-catch捕捉,否則編譯失敗。
-
如果呼叫了宣告異常的函式,要麼try-catch要麼throws,否則編譯失敗。
-
.什麼時候catch,什麼時候throws?功能內容可以解決,用catch,解決不了,用throws告訴呼叫者,有呼叫者解決。
-
如果一個功能丟擲了多個異常,那麼呼叫時必須有對應多個catch進行鍼對性的處理。
異常的丟擲 **throws Exception **
當我們將該類的異常直接丟擲後,可以不用在此類中執行該類的try catch的異常捕獲操作,進而將異常拋到執行該類的類中去進行try catch操作
public class ThrowsException {
//顯示異常 必須處理,如果不在該類中處理,那就必須在呼叫它的類中使用
public static Date dateTransfer(String date) throws ParseException {//丟擲此異常,所以此類中可有不用處理該異常
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.parse(date);
}
public static void main(String[] args) {
try {
System.out.println(dateTransfer("1999-02-78"));
} catch (ParseException e) {//呼叫了該方法,所以必須處理該異常,並且已經無法再向外丟擲
e.printStackTrace();
}
}
}
throw &throws
throw為人為觸發一個異常,出現在方法內部後面跟異常物件
throws為可能出現的異常,出現在方法宣告上
自定義異常
可以通過extends Exception來自定義一個異常
例如下面程式碼展示的 AppException & SystemException
AppException code
public class AppException extends Exception {
private int ErroCode;
private String ErrorMessage;
public int getErroCode() {
return ErroCode;
}
public void setErroCode(int erroCode) {
ErroCode = erroCode;
}
public String getErrorMessage() {
return ErrorMessage;
}
public void setErrorMessage(String errorMessage) {
ErrorMessage = errorMessage;
}
public AppException(int erroCode, String errorMessage) {
ErroCode = erroCode;
ErrorMessage = errorMessage;
}
}
//TestCode============================================
public class TestException {
public static int Divide(int a,int b) throws AppException {
try{
return a/b;
}catch(Exception e){
throw new AppException(999,"AppException");//throw人為丟擲一個異常,將原有的異常轉化為A異常
}
}
public static void main(String[] args) {
try {
System.out.println(Divide(2,0));
} catch (AppException e) {
System.out.println(e.getErroCode());
System.out.println(e.getErrorMessage());
}
}
}
SystemException code
public class SystemException extends Exception {
private int ErroCode;
private String ErrorMessage;
public int getErroCode() {
return ErroCode;
}
public void setErroCode(int erroCode) {
ErroCode = erroCode;
}
public String getErrorMessage() {
return ErrorMessage;
}
public void setErrorMessage(String errorMessage) {
ErrorMessage = errorMessage;
}
public SystemException(int erroCode, String errorMessage) {
ErroCode = erroCode;
ErrorMessage = errorMessage;
}
public SystemException(String message, int erroCode, String errorMessage) {
super(message);
ErroCode = erroCode;
ErrorMessage = errorMessage;
}
public SystemException(String message, Throwable cause, int erroCode, String errorMessage) {
super(message, cause);
ErroCode = erroCode;
ErrorMessage = errorMessage;
}
public SystemException(Throwable cause, int erroCode, String errorMessage) {
super(cause);
ErroCode = erroCode;
ErrorMessage = errorMessage;
}
public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, int erroCode, String errorMessage) {
super(message, cause, enableSuppression, writableStackTrace);
ErroCode = erroCode;
ErrorMessage = errorMessage;
}
}
//TestCode=============================================
public class TestSys {
public static int Divide2(int a) throws SystemException {
try{
int []aaa = new int[2];
aaa[3]=a;
return aaa[3];
}catch(Exception e){
throw new SystemException(1000,"system error");
}
}
public static void main(String[] args) {
try {
System.out.println(Divide2(34));
} catch (SystemException e) {
System.out.println(e.getErroCode());
System.out.println(e.getErrorMessage());
}
}
}
常見異常方法:
Error
非執行期異常
執行期異常
相關文章
- [Java基礎]異常Java
- Java基礎-異常Java
- Java基礎 — 異常Java
- Java之常見異常 整理集合Java
- Java之自定義異常Java
- Java基礎 ---Throwable異常類Java
- Java基礎知識——異常Java
- JavaSE基礎系列之異常Java
- Java基礎之淺談異常與瞭解斷言Java
- JAVA物件導向基礎--異常Java物件
- python 基礎之異常處理Python
- 零基礎學Java有哪些必看書?推薦這5本Java
- Java零基礎之多執行緒part2(新手可看)Java執行緒
- Java基礎異常整理(持續更新)Java
- 聊聊Java中的異常(基礎篇)Java
- JAVA學習之異常處理Java
- Java之異常處理try{}catch(){}Java
- Java零基礎小白必看的學習路線圖,快速入門!Java
- PHP基礎之錯誤與異常PHP
- Java 異常Java
- Java異常Java
- 異常JavaJava
- 【java】異常Java
- java 異常Java
- Java 異常(二) 自定義異常Java
- Python零基礎學習筆記(二十八)——異常處理Python筆記
- 新手必看!使用New File Menu常見問題集錦
- hibernate異常之--count查詢異常
- java安全編碼指南之:異常處理Java
- jmu-Java-06異常-01-常見異常Java
- Python基礎之錯誤和異常講解Python
- Java 異常表與異常處理原理Java
- Mac新手必看基礎篇,mac快捷鍵大集合Mac
- Python基礎總結之異常、除錯程式碼第十二天開始(新手可相互督促)Python除錯
- Java程式設計基礎20——異常&IO(File類)Java程式設計
- Jmeter新手入門必看JMeter
- Java 異常(一) 異常概述及其架構Java架構
- Java異常型別Java型別