OpenCV開發筆記(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉編譯移植到海思平臺Hi35xx平臺
阿新 • • 發佈:2022-03-24
異常類
一,前言
學習思路,瞭解異常類的概念,掌握異常的分類(Error類和Exception類),瞭解常見的RuntimeException下的子類,掌握異常的處理機制(拋抓語句,宣告拋異,人工拋異),掌握自定義異常類。
二,異常的概念
在Java語言中,將程式執行中發生的不正常情況稱為“異常”。(開發過程中的語法錯誤和邏輯錯誤不是異常)
三,異常的分類
Throwable: Error, Exception
1.Error類
Error類Java虛擬機器無法解決的嚴重問題。
常見的Error類:StackOverflowError(棧溢位),OutOfMemoryError(堆溢位)
StackOverflowError(棧溢位):
public static void main(String[] args) {
main(args);
}
OutOfMemoryError類(堆溢位):
public static void main(String[] args) {
Long[] arr = new Long[1024*1024*1024];
}
2.Exception類
分為編譯時異常和執行時異常。
編譯時異常:
-
- 是指編譯器要求必須處置的異常。即程式在執行時外界因素造成的異常。編譯器要求Java程式必須捕獲或宣告所有編譯時異常。
-
- 對於這類異常,如果程式不處理,可能會帶來意想不到的結果。
- 常見IOExeption等
執行時異常:
-
- 是指編譯器不要求強制處置的異常。一般是指程式設計時的邏輯錯誤,是程式設計師應該積極避免其出現的異常。
-
- 一般可以不作處理,因為很普遍,若全部處理可能會對程式的可讀性和執行效率產生影響。
- RuntimeException下的子類都為執行時異常
常見的執行時異常:
//NullPointerException(空指標異常) public void test(){ int[] arr = null; System.out.println(arr[1]); } //IndexOutOfBoundsException(下標越界異常) public void test(){ //ArrayIndexOutOfBoundsException(陣列下標越界異常) Byte[] bytes = new Byte[3]; System.out.println(bytes[4]); } //ClassCastException(型別轉換異常) public void test(){ Object obj = new Boolean(true); String str = (String)obj; } //NumberFormatException(數字格式化異常) public void test(){ String str = "abcd"; int num = Integer.parseInt(str); } //ArithmeticException(算術運算異常) public void test(){ int num1 = 3; int num2 = 0; int num3 = 3 / 0; } //InputMismatchException(輸入不匹配異常) public void test(){ Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); System.out.println(i); scanner.close(); }
四,異常的處理機制
Java採用異常處理機制,將異常處理的程式程式碼集中在一起,與正常的程式程式碼分開,使得程式簡潔,並易於維護。
1.概念
-
- Java提供的是異常處理的拋抓模型。
-
- Java程式的執行過程中如出現異常,會自動生成一個異常類物件,該異常物件將被提交給Java執行時系統,這個過程稱為丟擲(throw)異常。
-
- 如果一個方法內丟擲異常,該異常會被拋到呼叫方法中。如果異常沒有在呼叫方法中處理,它繼續被拋給這個呼叫方法的呼叫者。這個過程將一直繼續下去,直到異常被處理。這一過程稱為捕獲(catch)異常。
-
- 如果一個異常回到main()方法,並且main()也不處理,則程式執行終止。
-
- 程式設計師通常只能處理Exception,而對Error無能為力。
2.拋抓語句
異常處理是通過try-catch-finally語句實現的。
try{
...... //可能產生異常的程式碼
} catch( ExceptionName1 e ){
...... //當產生ExceptionName1型異常時的處置措施
} catch( ExceptionName2 e ){
...... //當產生ExceptionName2型異常時的處置措施
} [finally{
...... //無條件執行的語句
}]
//catch中常出現有關資訊
String getMessage( ):
用來得到有關異常事件的資訊
void printStackTrace( ) :
用來跟蹤異常事件發生時執行堆疊的內容。
3.宣告丟擲異常
-
宣告丟擲異常是Java中處理異常的第二種方式
-
如果一個方法中執行時可能生成某種異常,但是並不能確定如何處理這種異常,則此方法應顯式地宣告丟擲異常,表明將不對異常進行處理,而方法呼叫者負責處理。
-
在方法宣告中用 throws 子句可以宣告丟擲異常的列表,throws後面的異常型別可以是方法中產生的異常型別,也可以是它的父類。
例:
public void readFile(String file) throws FileNotFoundException {
// 讀檔案的操作可能產生FileNotFoundException型別的異常
FileInputStream fis = new FileInputStream(file);
}
4.人工丟擲異常
Java異常類物件除在程式執行過程中出現異常時由系統自動生成並丟擲,也可根據需要人工建立並丟擲
例:
int peach = new Random().nextInt()%7;
if(peach == 0) {
throw new Exception("message");
}
五,自定義異常類
使用者自定義異常類MyException,用於描述資料取值範圍錯誤資訊。使用者自己的異常類必須繼承現有的異常類。
例:
class MyException extends Exception {
static final long serialVersionUID = 值;
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}